1.先给出程序
#include<iostream>
#include<string>
#include<vector>
using namespace std;
void split(const string& src,const string& sep,vector<string>& ans)
{
string str=src;
string substr;
string::size_type start=0,index;
ans.clear();
while(index!=string::npos)
{
index=str.find_first_of(sep,start);
if(index!=string::npos)
{
substr=str.substr(start,index-start);
ans.push_back(substr);
start=str.find_first_not_of(sep,index);
if(start==string::npos)
return;
}
}
substr=str.substr(start);
ans.push_back(substr);
}
int main()
{
string a;
vector<string> ans;
cin>>a;
split(a,",",ans);
for(int i=0;i<ans.size();i++)
{
cout<<ans[i]<<endl;
}
return 0;
}
2.需要说明的有以下几点
①size_type是string类的一个静态成员变量,使用时要加作用域操作符。该变量是string的尺寸变量,定义string类型的下标要用到。它属于库类型的配套类型,库类型的使用就能与机器无关。
②npos定义为:
static const size_type npos = -1;
-1 被转换为无符号整数型别(unsigned int,unsigned long等),npos 也就成了该型别的最大无符号值。而find(包括find_first_of,find_first_not_of等)函数如果找不到子串,就返回npos;
③vector里面的元素输出有两种形式
1.)for(int i=0;i<ans.size();i++)
cout<<ans[i];
2.vector<string>::iterator q;
for(q=ans.begin();q!=ans.end();q++)
cout<<*q;