PATbasic1009详解

1009 说反话 (20 分)

一.题目:

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

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

Hello World Here I Come

输出样例:

Come I Here World Hello

二.题解:

解法一:
将输入字符串翻转,再把每个单词内部翻转,即可得到输出

Step1.Hello World Here I Come
Step2.emoC I ereH dlroW olleH
Step3.Come I Here World Hello

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;

int main()
{
    
    
    string s,s1;
    while(cin>>s1)
    {
    
    
        s+=' '+s1;
    }
    //在输入时,cin遇到空格就停止输入,所以只能一段一段读入,最后拼接起来
    
    int len=s.length();

    vector<char>str(len);
    
    for(int i=0; i<len; i++)
    {
    
    
        str[i]=s[i];
    }
    
    reverse(str.begin(),str.end());//整体翻转
    
    int tmp=0;

    for(int i=0; i<len; i++)
    {
    
    
        if(str[i]==' ')
        {
    
    
            reverse(str.begin()+tmp,str.begin()+i);//单词内部翻转
            tmp=i+1;

        }
    }
    for(int i=0; i<len-1; i++)//这里注意为了让i<len-1不输出最后的‘ ’
    {
    
    
        printf("%c",str[i]);
    }


    return 0;
}

运行结果
为了让大家更好看清楚把‘ ’换成了’~’
运行结果
这里注意while循环的终止
终止输入的方式:
windows系统下使用ctrl+Z
linux系统下使用ctrl+D
运行结果

解法二:
在这里使用了栈这个数据结构,栈是限定在表的一端进行插入和删除的运算的线性表,通常将插入、删除的一端称为栈顶,另一端称为栈底。不含元素的空表称为空栈。栈的操作具有先进后出或后进先出的特点。
在这里插入图片描述
将输⼊的每个单词s都依次压⼊栈中,然后将栈顶元素依次弹出,直到栈空为⽌

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <stack>
using namespace std;
int main()
{
    
    


    stack<string>str;
    string s;
    while(cin>>s){
    
    
        str.push(s);
    }


    int flag=0;
    while(!str.empty()){
    
    
        if(flag){
    
    
            cout<<" ";


        }
        cout<<str.top();
        str.pop();
        flag=1;
    }

    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_45627369/article/details/115325125