由于c++字符串没有split函数,所以字符串分割单词的时候必须自己手写,也相当于自己实现一个split函数吧!

  如果需要根据单一字符分割单词,直接用getline读取就好了,很简单

 #include <iostream>
#include <vector>
#include <string>
#include <sstream>
using namespace std; int main()
{
string words;
vector<string> results;
getline(cin, words);
istringstream ss(words);
while (!ss.eof())
{
string word;
getline(ss, word, ',');
results.push_back(word);
}
for (auto item : results)
{
cout << item << " ";
}
}

  如果是多种字符分割,比如,。!等等,就需要自己写一个类似于split的函数了:

 #include <iostream>
#include <vector>
#include <string>
#include <sstream>
using namespace std; vector<char> is_any_of(string str)
{
vector<char> res;
for (auto s : str)
res.push_back(s);
return res;
} void split(vector<string>& result, string str, vector<char> delimiters)
{
result.clear();
auto start = ;
while (start < str.size())
{
//根据多个分割符分割
auto itRes = str.find(delimiters[], start);
for (int i = ; i < delimiters.size(); ++i)
{
auto it = str.find(delimiters[i],start);
if (it < itRes)
itRes = it;
}
if (itRes == string::npos)
{
result.push_back(str.substr(start, str.size() - start));
break;
}
result.push_back(str.substr(start, itRes - start));
start = itRes;
++start;
}
} int main()
{
string words;
vector<string> result;
getline(cin, words);
split(result, words, is_any_of(", .?!"));
for (auto item : result)
{
cout << item << ' ';
}
}

例如:输入hello world!Welcome to my blog,thank you!

  感谢@chxuan提供的另一种实现方法,使用strtok_s分割字符串:

 std::vector<std::string> split(const std::string& str, const std::string& delimiter)
{
char* save = nullptr;
char* token = strtok_s(const_cast<char*>(str.c_str()), delimiter.c_str(), &save);
std::vector<std::string> result;
while (token != nullptr)
{
result.emplace_back(token);
token = strtok_s(nullptr, delimiter.c_str(), &save);
}
return result;
}

c++分割字符串(类似于boost::split)的更多相关文章

  1. boost split字符串

    boost split string , which is very convenience #include <string> #include <iostream> #in ...

  2. Boost::split用法详解

    工程中使用boost库:(设定vs2010环境)在Library files加上 D:\boost\boost_1_46_0\bin\vc10\lib在Include files加上 D:\boost ...

  3. 模拟java的split函数,分割字符串,类似于java的split方法

    /*自定义oracle的分割函数*//*定义一个type,用户接收返回的数据集合类型*/create or replace type splitType as table of varchar2(40 ...

  4. SQLServer实现split分割字符串到列

    网上已有人实现sqlserver的split函数可将字符串分割成行,但是我们习惯了split返回数组或者列表,因此这里对其做一些改动,最终实现也许不尽如意,但是也能解决一些问题. 先贴上某大牛写的sp ...

  5. boost:regex分割字符串(带有'\'字符) - zzusimon的专栏 - 博客频道 - CSDN.NET

    boost:regex分割字符串(带有'\'字符) - zzusimon的专栏 - 博客频道 - CSDN.NET boost:regex分割字符串(带有'\'字符) 分类: C++ 2011-08- ...

  6. Replace是替代 Split分割字符串

    Replace是替代 Split分割字符串string[] ReadText = str.Replace("\r\n", "@").Split('@'); Sp ...

  7. C# Split的用法,Split分割字符串

    C# Split的用法,Split分割字符串 分割单个字串:string str="来自张三的亲切问候!;string[] strarry=str.Split(new string[] { ...

  8. C#的String.Split 分割字符串用法详解的代码

    代码期间,把代码过程经常用的内容做个珍藏,下边代码是关于C#的String.Split 分割字符串用法详解的代码,应该对码农们有些用途. 1) public string[] Split(params ...

  9. javascript 中 split 函数分割字符串成数组

    分割字符串成数组的方法有很多,不过使用最多的还是split函数 <script language="javascript"> str="2,2,3,5,6,6 ...

随机推荐

  1. Struts工作机制图+OGNL+EL+值栈(Map,对象栈)

    struts 值栈  通过get set方法 方便的获取,设置属性值      比如从jsp页面传来的參数...从Action设置jsp所要回显的内容 注意EL表达式,struts2对request进 ...

  2. POJ1789 Truck History 【最小生成树Prim】

    Truck History Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 18981   Accepted: 7321 De ...

  3. jquery.ui.accordion的修改(支持展开多个)

    原文:jquery.ui.accordion的修改(支持展开多个) 背景:原jquery.ui.accordion插件,最多只能展开一个,不能展开多个,后来在网上找到了一个基于它的一个修改版(http ...

  4. poj3177(边双连通分量+缩点)

    传送门:Redundant Paths 题意:有n个牧场,Bessie 要从一个牧场到另一个牧场,要求至少要有2条独立的路可以走.现已有m条路,求至少要新建多少条路,使得任何两个牧场之间至少有两条独立 ...

  5. C语言文件操作之fgets()

        来说一说fgets(..)函数.     原型  char *  fgets(char * s, int n,FILE *stream);     參数:          s: 字符型指针, ...

  6. Android采用Application总结一下

    什么是 Application Application和Activity,Service由于是android框架的一个系统组件,当android程序启动时系统会创建一个 application对象.用 ...

  7. asp.net中用FileStream类实现下载文件功能,自定义下载路径,像IE下载一样

    方法一: //这个值可以从配置文件读取,或者放个textbox让用户填 string path = "你的路径";FileStream outputStream = new Fil ...

  8. leetcode第一刷_Permutations II

    当有反复元素的时候呢? 不用拍脑袋都会想到一种方法,也是全部有反复元素时的通用处理方法,维护一个set,假设这个元素没增加过就增加,增加过了的忽略掉.可是,在这道题上这个通用方法竟然超时了! 怎么办? ...

  9. Linux scp文件复制

    scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令.  1.scp命令的用处:  scp在网络上不同的主机之间复制文件,它使用ssh安全协议传输 ...

  10. SE 2014年4月13日

    要求自治系统之间建立BGP邻居关系,AS 100 中由于配置疏忽R5上忘记启用BGP,从而导致了黑洞问题出现.从而需要网络工程师们就现状问题进行分析,并且使用相应技术进行完善,使得AS 400 和AS ...