用指针的方式将一个字符串中的每个单词倒序
即如:(i am student —> student am i)
思路:1.将整个字符串逆序 2.将字符串中的每一个单词逆序
直接上代码:
#include<stdio.h>
#include<string.h>
void change(char* left, char* right) //用函数的形式将字符串逆序
{
while (left < right)
{
int ret = 0;
ret = *left;
*left = *right;
*right = ret;
left++;
right--;
}
}
int main()
{
char arr[100] = { 0 };
gets(arr); /输入一个字符串
int len = strlen(arr); /计算字符串长度
change(arr, arr + len - 1); /将首元素的地址和最后一个元素的地址传给chang函数
printf("%s", arr);/ 到这里时,我们已经将整个字符串逆序了
/关键步骤如下:
char* start;char* end;/首先,将逆序后的首元素地址赋给start和end。
start = arr; 思路为:先找到第一个单词,然后将其逆序
end = start;
while (*start) /当第一个元素不是‘\0’时,返回1,为真
{
while (*end != ' '&&*end!='\0')/当end解引用后的元素不是空格或者‘\0’时,end向后移动找下一个字符(字符串末尾是‘\0’)
{
end++;
}/来到这里时,end已经指到了第一个单词后面的空格处
change(start, end-1); /调用函数将第一个单词逆序,注意传的是end-1,因为我们要交换的是空格前的字符
if (*end != '\0')
{
end++; /跳过空格,定位到下一个单词的首元素
}
start = end;/将下一个单词首元素赋给start,再重复上述步骤。
}
printf("\n%s", arr);
return 0;
}