#include <stdio.h>
#include <string.h>
int main(){
int len,k=0,tag; //tag为标记位
char c[500001]={0};
gets(c);
len=sizeof(c); //sizeof()比strlen()多一位‘\n’
for(int i=0;i<len;i++){ //将原字符串多余空格删除,保证每个单词间只有一个空格;
if(!(c[i]==' '&&c[i+1]==' '))
c[k++]=c[i];
}
// puts(c); //打开put()看效果
tag=strlen(c); //tag每次标记在每个单词的最后一个字母的后一位
//其初始标记在字符串结尾‘\0’处
if(c[tag-1]==' '){ //若最开始的字符串后面有空格,再经过上面的循环,最后至多一个空格
//若有空格删除空格,并变化tag
c[tag-1]=c[tag];
tag--;
}
// puts(c); //打开put()看效果
for(int i=strlen(c);i>=0;i--){ //倒序
if(c[i]==' '||i==0){ //若遇到空格或者遇到第一个字母
if(c[i]==' ') //两个if都是将k标记在每个单词的第一个字母上
k=i+1;
else if(i==0)
k=i;
for(int j=k;j<tag;j++){ //打印每个单词
printf("%c",c[j]);
}
if(i!=0)
printf(" "); //在没遇到第一个单词前,每个单词间需要打印空格
tag=i; //每次打印一个单词后,将tag重新指向前一个(下一次需要打印)单词的后一位
}
}
return 0;
}
7-32 说反话-加强版 (20分)【超级详细注释版】
最新推荐文章于 2024-04-04 23:05:24 发布