IT技术博客大学习 共学习 共进步

一个简单的stl中string的split函数

Vimer 2010-10-21 08:51:16 浏览 4,264 次

在python,c#等语言中,string都是默认提供split这个函数的,C++里面却没有默认实现,但又经常会用到,所以就简单实现了一个:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
int SplitString(const string &srcStr,const string &splitStr,vector<string> &destVec)
{
    if(srcStr.size()==0)
    {   
        return 0;
    }   
    size_t oldPos,newPos;
    oldPos=0;
    newPos=0;
    string tempData;
    while(1)
    {   
        newPos=srcStr.find(splitStr,oldPos);
        if(newPos!=string::npos)
        {   
            tempData = srcStr.substr(oldPos,newPos-oldPos);
            destVec.push_back(tempData);
            oldPos=newPos+splitStr.size();
        }   
        else if(oldPos<=srcStr.size())
        {   
            tempData= srcStr.substr(oldPos);
            destVec.push_back(tempData);
            break;
        }   
        else
        {   
            break;
        }   
    }   
    return 0;
}

简单使用代码如下:

1
2
3
4
5
6
7
8
9
string src = ",,w,,ai,,,nio,,";
string splitStr = ",,";
vector<string> destVec;
 
SplitString(src,splitStr,destVec);
for(vector<string>::iterator it = destVec.begin();it!=destVec.end();++it)
{
    cout<<*it<<endl;
}

输出为:

 
w
ai
,nio

当然,一般split我们还是使用字符分割比较多。
另外也说一个问题,stl里面string的find和rfind方法是可以查找字符串的,但是find_last_of和find_first_of只能查找字符,即使传入的参数是字符串,查找的也是字符。

建议继续学习

  1. 关于使用STL的红黑树map还是hashmap的问题 (阅读 8,741)
  2. 萃取(traits)编程技术的介绍和应用 (阅读 6,365)
  3. STL笔记之二叉查找树 (阅读 3,983)
  4. String,StringBuffer,StringBuilder的区别 (阅读 3,941)
  5. 关于在函数调用时传递string引用的必要性 (阅读 3,881)
  6. 小趣闻:STL的三个版本 (阅读 3,783)
  7. Java将Object对象转换为String的总结合集 (阅读 3,701)
  8. 倒置字符串中的单词 (阅读 3,484)
  9. STL笔记之hashtable (阅读 3,383)
  10. 关于在“写时拷贝”发生的情况下直接操作string中内容出现的问题 (阅读 3,301)