题目:
将字符串中按单词翻转,如:(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、再对每个单词进行翻转,定两个变量p,r ,p指向单词开头的下标,遇到空格则r指向单词末尾下标(空格下标-1)。
3、每个单词从r到p填入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;
}
如果觉得这篇文章对你有所帮助的话,不妨点一个赞,十分感谢。