给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
如题,既然是按空格分割的,就用stingstream流实现转换,因为stringstream是以空格分隔字符串的。
#include <iostream>
#include <vector>
#include <sstream>
#define fi first
#define se second
#define pb push_back
#define SZ(x) ((ll)x.size())
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i=(a);i>=(b);--i)
#define REP(i,n) for(int i=0;i<(n);++i)
#define mem(a,b) memset(a,(b),sizeof(a));
const int maxn = 1e5+10;
using namespace std;
typedef long long ll;
typedef vector<ll> vi;
typedef pair<ll,ll> pii;
template<class T>
inline void read(T &x){
x=0;
int f=0;
char c=getchar();
while(!isdigit(c)){
f|=(c=='-');
c=getchar();
}
while(isdigit(c)){
x=(x<<3)+(x<<1)+c-'0';
c=getchar();
}
if(f) x=-x;
}
ll ksm(ll a,ll b,ll mod){
ll ans=1;
while(b){
if(b&1) ans=ans*a%mod;
a=a*a%mod;
b>>=1;
}
return ans;
}
ll gcd(ll a,ll b){
return b==0?a:gcd(b,a%b);
}
string s;
int k;
vector<string> q;
int main(){
getline(cin,s);
string c;
stringstream str(s);
while(str>>c) q.push_back(c);
for(int i=q.size()-1;i>=0;i--){
if(i!=q.size()-1) cout << " ";
cout << q[i];
}
return 0;
}
那么就复习一下stringstream的用法。
int main()
{
//实现类型转换。
string s="123456";
stringstream ss(s);//构造一个流。
//或者stringstream ss, ss.str(s);
int t=0;
//ss<<s;(将s输入流)
ss>>t;//(输出到t中)
ss.str("");//清空ss.
//stringstream st
//st.put('d') 插入数据。
cout << t;
}
然后我惊奇的发现,sscanf和sprint的用法也忘了。。。。。
函数用法:int sscanf( const char *buffer, const char *format, [ argument ] ... );
一些基本用法:
int main()
{
char s1[512];
char s2[512];
int rt;
char t[]= "UESTC EE 4200802";
sscanf(t,"%s %s %d",s1,s2,/*注意存放的是地址*/&rt);
//最左边存放已知的字符串,后面则为需要转换的格式。
cout << s1 << " " << s2 << " " << rt << endl;
cout<<"======================================"<<endl;
//取指定长度的字符串。
char *s="12345678";
sscanf(s,"%5s",s1);
cout << s1 << endl;
//取指定字符为止的字符串
s="123 abc";
sscanf(s,"%[^ ]",s1);
//%[^A-Z] %[^a-z] 等等。
cout << s1;
}
sprint就相对简单一点,
C 库函数 int sprintf(char *str, const char *format, ...) 发送格式化输出到 str 所指向的字符串。
//把整数123 打印成一个字符串保存在s 中。
sprintf(s, “%d”, 123); //产生"123"