PAT Basic 1009

PAT Basic 1009 说反话 (20)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue

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

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

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

输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello

思路:
一开始想的是读入一整行,然后开一个int数组a,记录空格在字符串中的位置,数组的第一个元素值为0,最后一个元素为字符串的长度s.length(),这样相当于a[0] ~ a[1], a[1]~a[2], a[n-1]~a[n]就是每个单词,然后打印。(但是总是17/20).


    scanf("%[^\n]", str);
    int len = strlen(str);
    int j=0;
    id[j++]=0;
    for(int i=0;i<len;i++){
        if(!isalpha(str[i])) id[j++]=i;
    }
    id[j++]=len;

    for(int i=j-2;i>=0;i--){
        if(i!=0){
            for(int k=id[i]+1;k<id[i+1];k++) cout<<str[k];
            cout<<" ";
        }else{
            for(int k=id[i];k<id[i+1];k++) cout<<str[k];
            cout<<endl;
        }
    }

解答:用一个栈每次读入一个单词放入栈中,这样输出的时候就是最后一个单词一直到第一个单词。而且不用特殊处理最后一个单词的问题,因为打印完最后一个单词之后,出栈,栈为空不会在继续循环多打印一个空格。


#include <iostream>
#include <stack>
#include <string>
//AC 20

using namespace std;

int main(){
    stack<string> s;
    string str;
    int flag=0;
    while(cin>>str){
        s.push(str);
    }

    while(!s.empty()){
        //单词之间打印空格
        if(flag) cout<<" ";
        else flag = !flag;
        cout<<s.top();
        s.pop();
    }


    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值