将字符串中按单词翻转(c语言描述)

题目:

将字符串中按单词翻转,如:(I want to be a painter) 变为 (painter a be to want I)

思路:

1、首先定一个动态字符串s2长度等于原字符串s1+1(因为要在末尾加空格,原串会越界),s1的翻转内容复制到s2并末尾加空格,把s2进行翻转 (retniap a eb ot tnaw I )
2、再对每个单词进行翻转,定两个变量prp指向单词开头的下标,遇到空格则r指向单词末尾下标(空格下标-1)。
3、每个单词从rp填入s1并加空格至最后一个。
4、输出打印s1

代码:
#include <stdio.h>
#include <string.h>
int main()
{
	char s1[] = "I want to be a painter";
	int len = strlen(s1) + 1;
	char * s2 = new char[len];
	int m = len - 2;
	for (int i = 0; i < len - 1; i++) //字符串翻转
	{
		s2[i] = s1[m]; //s2是翻转后的字符串
		m--;
	}
	s2[len - 1] = ' '; //字符串末尾加空格统一格式
	/*printf("%s\n%s\n", s1, s2);*/
	int p = 0, r = 0;
	m = 0;
	for (int i = 0; i < len; i++)
	{
		if (s2[i] == ' ')
		{
			r = i - 1; //此单词的末尾
			while (p <= r) //单词翻转
			{
				s1[m] = s2[r];
				r--;
				m++;
			}
			p = i + 1; //下一个单词的开头
			if (m != len - 1) //最后一个单词末尾不加空格
			{
				s1[m] = ' ';
				m++;
			}
		}
	}
	printf("%s\n", s1);
	return 0;
}

如果觉得这篇文章对你有所帮助的话,不妨点一个赞,十分感谢。

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于您的问题,我可以给出以下的C语言代码实现: ```c #include <stdio.h> #include <string.h> void reverse(char* start, char* end) { while (start < end) { char temp = *start; *start = *end; *end = temp; start++; end--; } } void reverseWords(char* str) { char* wordStart = str; char* temp = str; while (*temp) { temp++; if (*temp == '\0') { reverse(wordStart, temp - 1); } else if (*temp == ' ') { reverse(wordStart, temp - 1); wordStart = temp + 1; } } reverse(str, temp - 1); } int main() { char str[] = "welcome to cvte"; printf("Original string: %s\n", str); reverseWords(str); printf("Reversed string: %s\n", str); return 0; } ``` 该程序,我们定义了两个函数 `reverse` 和 `reverseWords`。其,`reverse` 函数用于翻转一个字符串的字符,`reverseWords` 函数用于翻转一个字符串的所有单词。 在 `reverseWords` 函数,我们先定义了两个指针 `wordStart` 和 `temp`,分别指向字符串的开始和结束位置。我们使用 `temp` 指针遍历整个字符串,当遇到空格或字符串结尾时,就调用 `reverse` 函数翻转 `wordStart` 和 `temp` 之间的字符。然后将 `wordStart` 指针移到下一个单词的开始位置,继续遍历字符串。最后,我们再一次调用 `reverse` 函数翻转整个字符串,得到最终结果。 以上代码输出结果为: ``` Original string: welcome to cvte Reversed string: cvte to welcome ``` 希望能够帮助到您!如果您还有其他问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值