有一个字符数组的内容为:"student a am i", 请你将数组的内容改为"i am a student".

解题思路

1.首先将student a am i 逆转成 i ma a tneduts。
2.然后将每个单词依次逆转。

逆转函数如下

实现字符逆转。

void change(char* ch ,int sz)
{
	char* right = ch+sz-1;
	char* left = ch;
	while (left < right)
	{
		char temp = 0;
		temp = *right;
		*right = *left;
		*left = temp;
		left++;
		right--;
	}
}

主函数检验

int main()
{
	char ch[] = "student a am i";          
	int len = sizeof(ch) / sizeof(ch[0]) - 1;
	change(ch, len);
	printf("%s\n", ch);
	return 0;
}

可以看到 i ma a tneduts。
2.将每一个单词依次逆转,
函数
每个单词的结束标志为空格,最后一个单词的结束标志为‘\n’,
所以遍历整个字符串。当遇到空格时,停下来,将之前的单词逆转
使用循环将每一个单词都进行逆转。

void fun(char ch[])
{							//i ma a tneduts
	
	while (*ch != '\0')
	{
		char* t = ch;
		int count = 0;
		while (*ch != ' '&& *ch != '\0')
		{
			ch++;
			count++;
		}
		change(t, count);
		if (*ch != '\0')
		{
			ch++;
		}
	}
}

全部代码

void change(char* ch ,int sz)
{
	char* right = ch+sz-1;
	char* left = ch;
	while (left < right)
	{
		char temp = 0;
		temp = *right;
		*right = *left;
		*left = temp;
		left++;
		right--;
	}
}
void fun(char ch[])
{							//i ma a tneduts
	
	while (*ch != '\0')
	{
		char* t = ch;
		int count = 0;
		while (*ch != ' '&& *ch != '\0')
		{
			ch++;
			count++;
		}
		change(t, count);
		if (*ch != '\0')
		{
			ch++;
		}
	}
}
int main()
{
	char ch[] = "student a am i";          
	int len = sizeof(ch) / sizeof(ch[0]) - 1;
	change(ch, len);
	fun(ch);
	printf("%s\n", ch);
	return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值