【全网最细PAT题解】【PAT乙】1009 说反话(cin、getline、cin.getline三种输入格式)

该文章介绍了如何使用C++编程解决将英文句子中单词顺序反转的问题,重点讲解了不同的输入格式,如cin、getline和cin.getline的使用,并提供了详细的解题思路和代码示例。

题目链接

1009 说反话

题目描述

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

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

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

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

题目大意

给出一个英文句子,将每个单词的位置倒转

解题思路

首先要区分三种输入格式

  • cin,可以输入string类型,也可以输入char数组,会被输入的空格打断
  • getline(cin,string类型变量,‘遇到哪个字符停止’)是对string类型的输入,空格会被记入
  • cin.getline(char类型变量,规定长度),是对char类型的输入,空格不会被打断,可以规定输入的长度

具体的使用方法可以看这篇文章【经验】关于区分cin、getline、cin.getline三种字符串输入的区别

然后就是对于当前单词的首字母和尾字母的表示,按字符串逆序遍历

  • i代表当前位置
  • j表示当前要表示字母的最后一个位置
  • temp表示遍历输出本字母
    在这里插入图片描述
    当碰到第一个空格时,i j temp表示的位置如图所示
    当输出完成时
    在这里插入图片描述
    j的位置变为i的前一个位置,指向下一个要表示字母的最后一个位置
    其他字母的输出同理

题解

#include<bits/stdc++.h>
using namespace std;
int main(){
    string s;
    getline(cin,s);     //用getline函数对带空格的字符串进行输入
    int j=s.length()-1;         //j用来记录当前单词的最后一个字母
    for(int i=s.length()-1;i>=0;i--){       //i用于记录当前指向
        if(s[i]==' '){
            //当s[i]为空格时,说明这个单词已经结束了,i+1表示当前单词的第一个字母,j表示当前单词的最后一个字母
            for(int temp = i+1;temp<=j;temp++)  cout<<s[temp];
            cout<<" ";
            j=i-1;  //更新j为下一个要输出的单词的最后一个字母
        }
        else if(i==0){      
            //当i=0时说明已经是字符串的一地个单词了,即要输出的最后一个单词
            //这时i代表当前单词的第一个字母,j表示当前单词的最后一个字母
            for(int temp = i;temp<=j;temp++)  cout<<s[temp];
        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值