for example:
输入一句 I am a student ->student a am I
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 1024
int main(int argc,char argv[])
{
char str[SIZE];
int count=0;
int i,j;
int begin,end;
//char instead[1024];
printf("input a string :\n");
gets(str);
char temp; //中间变量
int low=0,high=strlen(str)-1;
printf("字符串长度=%d \n",high);
while(low<=high) //逆置整个字符串
{
temp=str[low];
str[low++]=str[high];
str[high--]=temp;
}
//将单词调整为正常顺序
for(i = 0 ; i != strlen(str); )
{
while(str[i] == ' ' || str[i] == '\n')//若前面有换行符或者空格
{
i ++ ;
}
if(str[i] == '\0')
{
break ;
}
j=i;
while(str[j] != ' ' && str[j] != '\n' && str[j] != '\0')//找出单词的数组下标边界
{
j ++ ;
}
begin=i;//单词的初始位置
end=j-1;//最后j会到单词的下一个位置
//单词逆置
while(begin<end) //逆置整个字符串
{
temp=str[begin];
str[begin++]=str[end];
str[end--]=temp;
}
if(str[j]=='\0')
{
break;
}
i=j; //以j为开头 找到下一个单词
}
puts(str);
system("pause");
return 0;
}
调试成功的感觉还真是好!
本程序的要点:
1.首先对整个字符串进行逆置
2.对逆置后的字符串进行遍历,查找每个单词的初始位置和终止位置,并保存位置
3.对单词进行逆置, 然后循环实现整个数组即实现。