必须会的题

[C语言] 必须会的题_C语言




#include <stdio.h>
#include <string.h>

void reverse(char* left, char* right)
{
while (left < right)
{
char tmp = 0;
tmp = *right;
*right = *left;
*left = tmp;
left++;
right--; // 字符左边++ 字符右边--
}
}

int main()
{
char arr[20] = {0};
gets(arr); //获取输入的字符


int len = strlen(arr);
reverse(arr,arr+len-1); //颠倒所有字符 例如: abc def 变成 fed abc

char* start = arr;
while (*start) //*start等于\0时跳出循环
{
char* end = start;
while (*end != ' ' & *end != '\0') //获取空格分割的所有字符
{
end++;
}
reverse(start, end - 1); //end是\0 end-1是最后一个字符
if (*end == ' ') //如果end指向\0 不跳

{
start = end + 1; // end指向 空格的地址 end+1就是第串字符的首地址

}
else
start = end; //循环退出条件
}
printf("%s",arr);
return 0;
}