题目链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805314941992960
AC代码:
#include <iostream>
#include <cstdio>
#include <vector>
#include <string>
using namespace std;
int main(){
string s,tmp;
getline(cin,s);
vector<string> vec;
int len=s.size();
int j=0;
for(int i=0;i<len;i++){
if(s[i]==' '){
j++;
vec.push_back(tmp);
tmp="";
}
else if(s[i]=='\n')
break;
else
tmp+=s[i];
}
vec.push_back(tmp);
for(int i=j;i>=0;i--){
cout<<vec[i];
if(i>0)
printf(" ");
}
return 0;
}
关于cin与getline:
流提取运算符根据它后面的变量类型读取数据,从非空白符号开始,遇到Enter、Space、Tab键时结束。getline函数从istream中读取一行数据,当遇到“\n”时结束返回。
造成程序错误结果的原因是,用户输入完年龄后按回车结束输入,把“\n”留在了输入流里,而cin不会主动删除输入流内的换行符,这样换行符就被getline读取到,getline遇到换行符返回,因此程序不会等待用户输入。
#include <iostream>
#include <cstdio>
#include <vector>
#include <string>
using namespace std;
int main(){
int age;
string name;
cout<<"请输入年龄:"<<endl;
cin>>age;
getchar();
// cin.ignore();//加上getchar()或者这句消除'\n'对getline的影响
cout<<"请输入姓名:"<<endl;
getline(cin,name);
cout<<"年龄:"<<age<<endl;
cout<<"姓名:"<<name<<endl;
return 0;
}
二刷:
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
using namespace std;
int main(){
string s[100];
int cnt=0;
for(char st;st=getchar(),st!='\n';st==' '?cnt++:0)
if(st!=' ')
s[cnt].push_back({st});
// s[cnt].insert(s[cnt].end(),{st});
//用insert(),push_back()均可
for(int i=cnt;i>=0;i--){
if(i!=0)
cout<<s[i]<<" ";
else
cout<<s[i];
}
return 0;
}