【PAT Basic Level】1009 说反话

    技术2022-07-20  86

    目录

    题目分析代码

    题目

    给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

    输入格式

    测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。

    输出格式

    每个测试用例的输出占一行,输出倒序后的句子。

    输入样例

    Hello World Here I Come

    输出样例

    Come I Here World Hello

    分析

    遍历一遍句子s,用数组a存储空格的位置。如对句子:abc de ghij k,有a[0] = 3,a[1] = 6,a[2] = 10。 然后从a[n],也就是最后一个空格开始,依次输出。 有几个点要注意: 1.cin函数不接受空格等一切空字符,比如:

    string s; cin>>s; cout<<s;

    结果为 可以用cin.get()替代,详见这篇:C++读取带空格字符串 2.注意输出时的判断条件。一直输出直到遇到空格,以及字符串未结束(最后一个单单词后没有空格) 3.题目规定了句子不超过80个字符。。。一开始只申请了80个结果错误,申请81个才够。。。。还有a大小为40就够了,因为最多的情况(一个字母一个空格)也就是这么多。

    代码

    #include<iostream> #include<string> using namespace std; int main(){ char s[81]; cin.get(s,81); int a[40],i,j = -1; for(i = 0;s[i] != '\0';++i){ if(s[i] == ' '){ ++j; a[j] = i; }//找空格位置 } for(j;j >= 0;j--){ for(i = a[j]+1;s[i] != '\0' && (s[i] != ' ');++i) cout<<s[i]; cout<<' '; } for(i = 0;s[i] != ' ' && s[i] != '\0';++i) cout<<s[i];//补上第一个单词 }
    Processed: 0.009, SQL: 9