c++没有标准split函数,刚好刷算法自己实现了,记录下
并且具有多个字符去重功能。
效果:
代码:
#include <iostream>
#include <vector>
using namespace std;
vector<string> split(string sre,char split_char);
int main()
{
vector<string> a=split(",,,sad,refe,,asd,a",',');
cout<<"拆分的字符串为:"<< ",,,sad,refe,,asd,a"<<"字符为:"<<','<<endl;
cout<<"拆分结果:"<<endl;
//输出处理结果
for(vector<string>::iterator i=a.begin();i!=a.end();i++)
{
cout<<*i<<endl;
}
return 0;
}
vector<string> split(string s,char split_char)
{
//记录处理完成后的字符串
string handle_string="";
bool is_have_word=false;
bool is_have_spac=false;
//处理字符串 去掉多余字符
for(int i=0;i<s.size();i++)
{
//当出现空格
if(s[i]==split_char)
{
//当前一个有单词
if(is_have_word)
{
//先反转标志位
is_have_word=false;
//记录下一个空格
is_have_spac=true;
}
else{
continue;
}
}
//当出现单词
else{
//反转标志位
is_have_word=true;
//先判断前面有没有需要输出的空格
if(is_have_spac)
{
handle_string+=split_char;
//反转标志位
is_have_spac=false;
}
handle_string+=s[i];
}
}
//提取所有子串 字符串分割
//分割的字符串
//存储的数组
vector<string> strs;
int size=handle_string.size();
//标志位
is_have_spac=false;
//记录当前空格位置 注意-1
int curr_spac=-1;
//记录前一个空格位置
int for_spac=-1;
for(int i=0;i<size;i++)
{
//当前面有拆分字符串时开始拆分
if(is_have_spac)
{
string str="";
//当前一个字符为空格时 存储当前子串
for(int j=for_spac+1;j<curr_spac;j++)
{
str+=handle_string[j];
}
strs.push_back(str);
}
//当遇到拆分字符串时做标记
if(handle_string[i]==split_char)
{
is_have_spac=true;
//记录下空格位置
for_spac=curr_spac;
curr_spac=i;
}
else{
is_have_spac=false;
}
//最后一组需要手动拆分
if(i==size-1)
{
string str="";
//当前一个字符为空格时 存储当前子串
for(int j=curr_spac+1;j<size;j++)
{
str+=handle_string[j];
}
strs.push_back(str);
}
}
return strs;
}