方法1
用标准模板库,简洁而清晰。
#include<string>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
vector<string> v;
string s;
while(cin>>s){
v.push_back(s);
}
for(int i=v.size()-1;i>=0;i--){
if(i==v.size()-1){
cout<<v[i];
}else cout<<" "<<v[i];
}
cout<<endl;
return 0;
}
方法2
使用两次翻转,思想很重要,代码略显繁琐。
1.对句子整体翻转
2.对每个单词单独翻转
例如:I’m a student
翻转:student a I’m
注意:此代码提交PTA上的测试不能通过
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main(){
char str[110];
gets(str);
int len=strlen(str);
int i=0,j=len-1;
while(i<j){
swap(str[i],str[j]);
i++;
j--;
}
// puts(str);
int h=0,t;
for(i=0;i<len;i++){
if(str[i]==' '){
t=i-1;
while(h<t){
swap(str[h],str[t]);
h++;
t--;
}
h=i+1;
}else if(i==len-1){
t=i;
while(h<t){
swap(str[h],str[t]);
h++;
t--;
}
}
}
puts(str);
return 0;
}
方法3
使用二维字符数组
#include<cstdio>
#include<cstring>
int main(){
char str[100];
gets(str);
int r=0,h=0;
int len=strlen(str);
char ans[90][90]; //r h
for(int i=0;i<len;i++){
if(str[i]!=' '){
ans[r][h++]=str[i]; //no blank fill in col
}
else{
ans[r][h]='\0';
r++;
h=0;
}
}
for(int i=r;i>=0;i--){
printf("%s",ans[i]);
if(i>0)
printf(" ");
}
return 0;
}