C++学习笔记(六)~提取字符串中每一个单词【istringstream 字符流】

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6


前言

        题目要求:提取一个字符串中所有的单词,例如“my name is haihong”,返回“my”“name”“is”“haihong”。

解答

方法一:

#include <iostream>
#include<vector>
using namespace std;
vector<string> word_1(string s)
{
vector<string> ans;
for(int i=0;i<s.size();++i)
{
int j=i;
string temp;
while (s[j]!=' ')
{
++j;
}
temp=s.substr(i,j-i);
ans.push_back(temp);
i=j;
}
return ans;
}

int main()
{
vector<string> s;
s=word_1("my name is haihong");
for(int i=0;i<s.size();++i)
cout<<s[i]<<endl;
return 0;
}

运行结果

C++学习笔记(六)~提取字符串中每一个单词【istringstream 字符流】_#include


方法二:

#include <iostream>
#include<vector>
using namespace std;
vector<string> word_2(string s)
{
int start = 0;
vector<string> res;
for(int i = 0;i<s.size();i++){
if(s[i] == ' '){
string temp = s.substr(start,i-start);
res.push_back(temp);
start = i+1;
}
}
// 补上最后一个单词
string temp = s.substr(start,s.size()-start);
res.push_back(temp);
return res;
}

int main()
{
vector<string> s;
s=word_2(" my name is haihong");
for(int i=0;i<s.size();++i)
cout<<s[i]<<endl;
return 0;
}

运行结果

C++学习笔记(六)~提取字符串中每一个单词【istringstream 字符流】_istringstream_02


注意:以上只适合于:第一个和最后一个字符不是空格、每个单词之间只有一个空格

方法三:

#include <iostream>
#include<vector>
#include<sstream>
using namespace std;

vector<string> word_4(string s)
{
vector<string> res;
for(int i=0;i<s.size();++i)
{
while(s[i]==' ')
++i;
int j=i;
while(s[j]!=' '&&j<s.size())// 注意:这里需要加上j<s.size()
++j;
string temp=s.substr(i,j-i);
res.push_back(temp);
i=j;
}
return res;
}
int main()
{
vector<string> s;
s=word_4(" my name is haihong ");
for(int i=0;i<s.size();++i)
cout<<s[i]<<endl;
return 0;
}

运行结果

C++学习笔记(六)~提取字符串中每一个单词【istringstream 字符流】_#include_03

方法四:【istringstream 字符流】

#include <iostream>
#include<vector>
#include<sstream>// 使用istringstream就需要引入 sstream
using namespace std;

vector<string> word_3(string s)
{
vector<string> res;
istringstream words(s);
string word;
while(words>>word)
{
res.push_back(word);
}
return res;
}

int main()
{
vector<string> s;
s=word_3(" my name is haihong");
for(int i=0;i<s.size();++i)
cout<<s[i]<<endl;
return 0;
}

运行结果

C++学习笔记(六)~提取字符串中每一个单词【istringstream 字符流】_istringstream_04


注意:方法三、四适用于任意字符串


阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: c++

“C++学习笔记(六)~提取字符串中每一个单词【istringstream 字符流】” 的相关文章