在 C++ 中拆分字符串
Splitting a string in c++
我正在编写一个函数来反转字符串中的单词。我的想法是用 ' ' 拆分一个字符串,将单词压入堆栈,然后将它们弹出以打印单词反转的字符串。
但是,我无法使用 stringstream class.
拆分字符串
我的代码如下:
#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' 都出现在堆栈中。
有人知道我的代码有什么问题吗?
这个怎么样?
#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;
}
在您的情况下,流提取器 (operator >>
) 在 Hello world 中的 space 之后停止读取,因此 s="Hello"
。
要解决此问题,请使用 getline(cin,s);
已编辑以包含 @Pete Becker
所述的更多详细信息
我正在编写一个函数来反转字符串中的单词。我的想法是用 ' ' 拆分一个字符串,将单词压入堆栈,然后将它们弹出以打印单词反转的字符串。
但是,我无法使用 stringstream class.
拆分字符串我的代码如下:
#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' 都出现在堆栈中。
有人知道我的代码有什么问题吗?
这个怎么样?
#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;
}
在您的情况下,流提取器 (operator >>
) 在 Hello world 中的 space 之后停止读取,因此 s="Hello"
。
要解决此问题,请使用 getline(cin,s);
已编辑以包含 @Pete Becker
所述的更多详细信息