将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I
废话不多说!上代码!!!
#include<stdio.h>
#include<string.h>
#include<assert.h>
void reverse(char* left,char* right)
{
assert(left);
assert(right);
while (left <= right)
{
int tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
int main()
{
char arr[101];
char* left, *right;
gets_s(arr);
int len = strlen(arr);
//先全部倒置
reverse(arr,arr+len-1);
left = arr;
//逐个单词倒置
while (*left)
{
right = left;
while (*right!=' '&&*right!='\0')
{
right++;
}
reverse(left, right-1);
if (*right != '\0')
right += 1;
left = right;
}
printf("%s", arr);
return 0;
}
解释:
思路:1、先整体倒置 I like beijing. -> .gnijieb ekil I
2、再单个单词倒置:.gnijieb -> beijing.
ekil -> like
I -> I
最后 .gnijieb ekil I -> beijing. like I
注意:
字符串里面的每个单词之间都是有空格的,scanf无法将有空格的数据输入,因为它遇到空格就会停下,不再读取后面的内容。所以我们选用gets来进行数据的输入。