两种方法实现语句反向

错误日记

1.char * a 与char a[]的区别

字符指针指向字符常量,不可改变

2.char * a, b;

定义了一个字符指针a 和一个字符b,

并非定义两个字符指针。


问题:把 I am from shanghai 输出 shanghai from am I

法1:整段字母反向,再分辩单词,再将单词反向

/*************************************************************************
    > File Name: reseq.c
    > Author: ma6174
    > Mail: ma6174@163.com 
    > Created Time: 2017骞?5鏈?4鏃?鏄熸湡鏃?02鏃?1鍒?0绉? ************************************************************************/

#include<stdio.h>
#include<string.h>

void reseq(char * a, int len);
void reseq2(char * a, int len);

int main()
{	
	char p[] = "I am from shanghai";
	printf("%s\n", p);
	reseq(p, strlen(p));
	printf("%s\n", p);
	reseq2(p, strlen(p));
	printf("%s\n", p);
	return 0;
}

void reseq(char * a, int len)
{
	int i;
	char t;

	for(i = 0; i < len / 2; i++)
	{
		t = a[i];
		a[i] = a[len - 1 - i];
		a[len - 1 - i] = t;
	}
}


void reseq2(char *a, int len)
{
	int start = 0;
	int index = 0;
	int i;

	for(i = 0; i <= len; i++)
	{
		if(a[i] == ' ' || a[i] == '\0')
		{
			reseq(&a[start], index);
			printf("%d %d\n", start, index);
			start = start + index + 1;
			index = 0;
		}
		else
		{
			index++;
		}
	}
}
运行结果,体现了3步过程



法2 
分辩单词,将单词顺序反向

/*************************************************************************
    > File Name: reseq2.c
    > Author: ma6174
    > Mail: ma6174@163.com 
    > Created Time: 2017骞?5鏈?4鏃?鏄熸湡鏃?02鏃?6鍒?4绉? ************************************************************************/

#include<stdio.h>
#include<string.h>

void divide(char *a, int len);
int main()
{   
	char a[100];
	printf("Please input a phase and end with /enter \n");
	scanf("%[^\n]", a);
	divide(a, strlen(a));	
	return 0;
}

void divide(char *a, int len)
{
	char div[100][100] ;
	int i = 0, j = 0, index;

	for(index = 0; index <= len; index++)
	{
		if(a[index] == ' '|| a[index] == '\0')
		{
			i++;
			j = 0;
		}
		else
		{
			div[i][j] = a[index];
			j++;
		}
	}
    i--;
	while(i >= 0)
	{ 
		printf("%s ", div[i]);
		i--;
	}
	printf("\n");

}
运行结果

进行改进 可对任意字符串进行反向


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值