将一句话的单词进行倒置,标点不倒置。比如 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来进行数据的输入。