问题描述
倒置字符串,将一句话的单词进行倒置,标点不倒置。如: I like beijing. 经过函数后变为:beijing. like I
思路
在将字符串整个逆序的基础上,再将其中的每个单词进行逆序。
代码及注释如下
#include<stdio.h>
#include<string.h>
void reverse(char* left,char* right)
{
//两端字符进行交换
char mid=0;
while(left<right)
{
mid=*left;
*left=*right;
*right=mid;
left++;
right--;
}
}
void reverse_every(char* dest)
{
char* start=dest;
char* startn=dest;
char* destn=dest;
char mid=0;
while(1)
{
while(*dest != ' ' && *dest !='\0')
{
dest++;
}
startn=dest+1;
destn=dest+1;//保存下个单词的首地址,以便下次循环使用
dest--;
if(*dest == '\0')
break;
reverse(start,dest);//再利用reverse()函数实现每个单词的逆序
start=startn;
dest=destn;
}
}
int main()
{
char arr[100];
char* left=arr;
char* right=arr;
char* start=arr;
int sz=0;
int i=0;
gets(arr);//输入字符串,如: I like Beijing.
sz=strlen(arr);
left=arr;
start=arr;
right=arr+sz-1;;
reverse(left,right);//颠倒整个字符串
//printf("%s",arr);
reverse_every(start);//颠倒字符串中的每个单词
printf("%s\n",arr);
return 0;
}