给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。 输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。
输入样例:
Hello World Here I Come 结尾无空行 输出样例:
Come I Here World Hello 结尾无空行 下面是五个测试点(注意,**前两代码通过,第三个由于其算法的特殊性,无法通过)
话不多说,先上一段代码:
#include<iostream>
#include<stack>
using namespace std;
#include<string>
int main()
{
stack<string>s;
string str;
while(cin>>str)
{
s.push(str);
}
if(s.empty())
return 0;
else {cout<<s.top();
s.pop();
while(!s.empty())
{
cout<<" "<<s.top();
s.pop();
}}
}
注意这里我也是刚知道cin确实是有返回值的,在oj平台上一旦输入停止我们就会停止输入,但是在自己电脑就不行了,这个代码无法通过全是空格的情况,不放在接受全部信息之后判断展示全为空,若全为空,则直接返回0; 接下来是我找的
#include<stdio.h>
#include<iostream>
using namespace std;
#include <cstdio>
#include<string.h>
int main()
{
char a[50000];
cin.getline(a, 50000);
int l=strlen(a);
int i,j;
int word=0;
int first=1;
if(strcmp(a, " ")==0)
{
return 0;
}
for(i=l-1;i>=0;i--)
{
if(word!=0&&a[i]==' ')
{
if(first==1) first=0;
else cout<<" ";
for(j=i+1;j<=i+word;j++)
cout<<a[j];
word=0;
}
else if(a[i]!=' ') word++;
}
if(word>0)
{
if(first==0)
cout<<" ";
for(j=0;j<=word-1;j++)
cout<<a[j];
}
return 0;
}
只有这个通过了 这是我写的其他几个未通过的
#include <iostream>
using namespace std;
int out(){
string s;
if(cin>>s){
out();
cout<<s<<" ";
}
else{
cout<<s;
return 0;
}
}
int main()
{
string S1;
cin>>S1;
out();
cout<<S1;
return 0;
}
这个方法是非常妙的,巧妙运用递归的相关知识,非常好,但是不幸的事,调用层数太多,出现段错误,无语了
|