7-32说反话-加强版(20)

            7-32 说反话-加强版 (20 分)

给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。
输出格式:每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。
输入样例:Hello World Here I Come
结尾无空行
输出样例:Come I Here World Hello
结尾无空行
知识点:gets函数、字符数组、for循环嵌套

C代码#include#includeint main() { char c[500001]="\0"; gets©; int len=strlen©;//输入字符串长度 char a[500001]="\0"; int i,count=0,m=0,k,flag=0; for(i=len-1; i>=0; i–) { if(c[i]!=’ ‘) count++;//统计单词的字符个数 else { if(flag0||c[i-1]’ ‘) {//存第一个单词,遇见多个空格时,判断空格的下一个是否还是空格 for(k=i+1; k<=i+count; k++)//是的话就存第一个空格到i+count的字符进a数组 a[m++]=c[k]; count=0;//方便下一个统计 flag=1; } if(flag1&&c[i-1]!=’ ‘) {//存第二个单词,排除连续空格情况 for(k=i+1; k<=i+count; k++) a[m++]=c[k]; a[m++]=’ ‘;//存入一个空格(输出要求) count=0; } } } if(count!=0) {//判断输入的第一个单词 for(k=i+1; k<=i+count; k++) a[m++]=c[k]; } int n,x; for(x=0;x’ '); else printf("%c",a[n]); printf("\n"); return 0;}

知识点:getline输入、while循环嵌套
C++代码
#includeusing namespace std;int main(){ string s; getline(cin,s); int i=0,flag=0; //统计长度 while (s[i+1]!=’\0’) i++; //循环遍历 while (i>=0) { int a=0, b=0;//a,b可以看作俩指针,控制单词的起始和结束,先找b结束字符 while (s[i] == ’ '&&i>=0) i–; b = i; while (s[i] != ’ '&&i>=0) i–; a = i+1; if (flag > 0&&(a>0||b>0)) cout<<(" “); //输出[a,b]的一个单词 for (int j=a; j <= b; j++) cout<< (”%c", s[j]); ++flag; } return 0;}

你可能感兴趣的:(笔记)