题目链接: 倒置字符串.
思路:我们只需要找出一对子字符串就对他一逆置,所有的子字符串都逆置一遍直到运到‘\0’,最后再整体一逆置,最终就会得到我们想要的结果
#include<stdio.h>
#include<string.h>
#include<assert.h>
//逆置字符串
void reverse(char *left,char *right)
{
//逆置一段区间的字符串
while(left < right)
{
char ch = *left;
*left = *right;
*right = ch;
left++;
right--;
}
}
void reverse_string(char *str)
{
char *left = str;
char *right = str+strlen(str) - 1;
while(*str)
{
char *begin = str;
char *end = str;
while(*end != ' ' && *end != '\0')
{
end++;
}
//找到一段区间字符串对他一逆置
reverse(begin,end - 1);
//如果end已经指向‘\0’了就不需要再往后走了,防止越界
if(*end != '\0')
str = end + 1;
//当end已经指向了'\0'那么意味着整个字符串也走完了,str = end循环终止
else
str = end;
}
//整体逆置
reverse(left,right);
}
int main()
{
char arr[100] = {0};
gets(arr);
reverse_string(arr);
printf("%s",arr);
return 0;
}