如何解决在 C++ 中拆分字符串
我正在编写一个函数来反转字符串中的单词。我的想法是用' '分割一个字符串,将单词推入堆栈并弹出它们以反转单词打印字符串。
但是,我无法使用 stringstream 类拆分字符串。
我的代码如下:
#include<iostream>
#include<stdlib.h>
#include<string.h>
#include<stack>
#include<string>
#include<bits/stdc++.h>
using namespace std;
void reverse_words(string s){
stack <string> stack_words;
string popped_element;
string result = "";
stringstream split(s);
string token;
while(getline(split,token,' ')){
cout<<"pushed "<<token;
stack_words.push(token);
}
while(!stack_words.empty()){
popped_element = stack_words.top();
stack_words.pop();
result.append(" ");
result.append(popped_element);
}
cout<<result;
}
int main(){
string s,res;
cout<<"\n Enter a string :";
cin>>s;
reverse_words(s);
}
例如,当我输入 'Hello World' 时,只有 'Hello' 被推入堆栈,而我需要堆栈中同时存在 'Hello' 和 'World'。
有人知道我的代码有什么问题吗?
解决方法
在您的情况下,流提取器 (operator >>
) 在 Hello world 中的空间之后停止读取,因此 s="Hello"
。
要解决此问题,请使用 getline(cin,s);
这个怎么样?
#include <bits/stdc++.h>
#include <iostream>
using namespace std;
void reverseWords(string s)
{
vector<string> tmp;
string str = "";
for (int i = 0; i < s.length(); i++)
{
if (s[i] == ' ')
{
tmp.push_back(str);
str = "";
}
else
str += s[i];
}
tmp.push_back(str);
int i;
for (i = tmp.size() - 1; i > 0; i--)
cout << tmp[i] << " ";
cout << tmp[0] << endl;
}
int main()
{
string s;
getline(cin,s);
reverseWords(s);
return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。