C++使用strtok实现分割字符串。

C++中有一些号称很优雅的功能和方法……但是有的压根不能指定分隔符,有的依赖于stream所以分隔符只能是char,真是Ugly到家了……

比如stackoverflow中提到的诸多方法:http://stackoverflow.com/questions/236129/how-to-split-a-string-in-c

其实strtok是标准的c函数啊,而且现在重入问题也已经被解决了,通过保存指针的方式,为什么不喜欢用呢?
我一直认为,C++是最难用的语言,没有之一。

9月22日更新,处理了一个异常情况:如果分割出的字符串为空,NULL,需要额外处理!

#include <iostream>
#include <string>

void MidQuery::SplitString(const ::std::string str, const ::std::string delimiter, ::std::vector< ::std::string >& tokens)
{
    char* tok = NULL;
    char* save = NULL;
    tok = strtok_r(const_cast<char*>(str.c_str()), delimiter.c_str(), &save);
    //Take Care
    if(tok!=NULL)
    {
        tokens.push_back( ::std::string(tok) );
    }
    while((tok = strtok_r(NULL, delimiter.c_str(), &save))!=NULL)
    {
        //Take Care
        if(tok!=NULL)
        {
            tokens.push_back( ::std::string(tok));
        }
    }
}

Leave a Reply

Your email address will not be published. Required fields are marked *