华为笔试:单词倒排

mac2024-04-11  29

题目描述 对字符串中的所有单词进行倒排。

说明:

1、每个单词是以26个大写或小写英文字母构成;

2、非构成单词的字符均视为单词间隔符;

3、要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;

4、每个单词最长20个字母;

输入描述: 输入一行以空格来分隔的句子

输出描述: 输出句子的逆序

示例1 输入 I am a student 输出 student a am I

思路:运用栈的思想,AC了90%,是我没过的例子是我没完全看懂题目意思,后面也懒得改代码了,九江吧

#include<iostream> #include<string> #include<stack> using namespace std; int main() { string s; while(getline(cin,s)) { stack<string>Stack; int tmp=0; string str; for(int i=0;i<s.size();i++) { if(s[i]!=' ')//每个单词 { str+=s[i]; } else if(s[i]==' '&&s[i-1]!=' ')//确保两个单词之间有多个空格的情况下,不会把空格也放进栈中 { for(int i=0;i<str.length();i++) { if(!((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z'))) { tmp=1; break; } } if(tmp==0) { Stack.push(str); str.clear(); } else { tmp=0; str.clear(); } } } Stack.push(str); while(!Stack.empty()) { if(!Stack.empty()) { cout<<Stack.top(); Stack.pop(); } if(!Stack.empty())//确保输出的倒序字符串最后面不会多一个空格 { cout<<" "; } } cout<<endl; } return 0; }

牛客网运行结果: 没过的例子:

最新回复(0)