您的位置:首页 > 其它

ACM_1: 翻转句子中单词的顺序

2014-04-17 11:53 127 查看
/*输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。

例如输入―I am a student ,则输出―student. a am I

思路分析: 先将所有字符全部反转,则成 tnedutS a ma I ,然后把每个单词再一次反转即可,这样负负地正!

*/

void inverse(char aa[] ,int start ,int end){ //将所有字符反转,然后一直调用这个函数!

int k=0;

char tmp;

for(k=0;k<(end- start)/2 +1;k++){

tmp = aa[start+k];

aa[start+k] = aa[end-k];

aa[end-k] = tmp;

}

}

void roll(){

char aa[100]={0};

char a;

int i=0,j;

while( (a = getchar()) !='\n'){

aa[i]=a;

i++;

}

printf("输入字符串长度为:%d",i);

printf("\n");

inverse(aa , 0, i-1);

j=0;

for(j=0;j< i; j++)

printf("%c",aa[j]);

printf("\n");

//现在已经镜像转换完毕!接下来如何把每个单词来反转。

int k=0;

int start=0;

int n= -1;

for(k=0 ; k< i; k++)

{

if (aa[k] == ' ') {

n=k;

inverse(aa , start+1 , k-1);

}

else if(aa[k]!= ' ')

start =n;

if(k== i-1) //因为最后一个单词没有结束符号(空格)!所以得手动判断!

inverse(aa,start+1,k);

}

for(j=0;j< i; j++)

printf("%c",aa[j]);

printf("\n");

}

#include<stdio.h>

#include<string.h>

int main(){

roll();

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: