C++学习笔记(六)~提取字符串中每一个单词【istringstream 字符流】
前言
题目要求:提取一个字符串中所有的单词,例如“my name is haihong”,返回“my”“name”“is”“haihong”。
解答
方法一:
#include
#include
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;
}
运行结果

方法二:
#include
#include
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;
}
运行结果

注意:以上只适合于:第一个和最后一个字符不是空格、每个单词之间只有一个空格
方法三:
#include
#include
#include
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;
}
运行结果

方法四:【istringstream 字符流】
#include
#include
#include// 使用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;
}
运行结果

注意:方法三、四适用于任意字符串。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
