总时间限制: 题目
1000ms
内存限制:
65536kB
描述
输入一个句子(一行),将句子中的每一个单词翻转后输出。
输入
只有一行,为一个字符串,不超过500个字符。单词之间以空格隔开。
输出
翻转每一个单词后的字符串,单词之间的空格需与原文一致。
样例输入
hello world
样例输出
olleh dlrow
思路:
0 每次查看s中的一个字符
1 利用栈先入后出的思想存储单词然后倒序输出
2 string s; cin>>s;不能读取带空格的字符串,因此需要getline(cin,s)函数,当然也能用c语言中的char s[MAX]; gets(s);
3 对栈的遍历不能用for+栈.size()的方式,必须用while(!栈.empty())
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<stack>
using namespace std;
int main()
{
//freopen("input.txt","r",stdin);
string s;
getline(cin,s);//cin>>s不能读取空格,必须用getline(cin,s)读取一整行
int len = s.length();
//char s[501];
//gets(s);
//int len=strlen(s);
//s[len+1]='\0';
int i=0;
stack<char> vac;
while(i<len)
{
if(s[i]!=' ') vac.push(s[i]);
else
{
/*for(int j=0;j<vac.size();j++) //不能用j<vac.size()!!因为vac.size()是动态变化的
{
cout<<vac.top();
vac.pop();
}*/
while(!vac.empty())
{
cout<<vac.top();
vac.pop();
}
cout<<' ';
}
i++;
}
while(!vac.empty())
{
cout<<vac.top();
vac.pop();
}
return 0;
}