开始

```
find() : Finds the first substring equal to the given character sequence
find_first_of() : Finds the first character equal to one of characters in the given character sequence
//字符串分割函数 str为待分割的字符串 pattern为任意分割符(**每一个字符都为分割符**),
//例如:";,"是以 ';' 和 ',' 分割,并且去掉了分割后的空字符串。 sbcssdfs 以s分割得 "bc" "df"
vector<string> split(string str, string pattern)
{
    vector<string> ret;
    if (pattern.empty()) return ret;
    size_t start = 0;
    size_t index = str.find_first_of(pattern, 0);
    while (index != string::npos)
    {
        if (start != index)
            ret.push_back(str.substr(start, index - start));
        start = index + 1;
        index = str.find_first_of(pattern, start);
    }
 
    if (!str.substr(start).empty())
        ret.push_back(str.substr(start));
    return ret;
}
//分割后保留空字符串。sbcssdfs 以s分割得 "" "bc" "" "df" ""
vector<string> split(string str, string pattern)
{
    vector<string> ret;
    if (pattern.empty()) return ret;
    size_t start = 0;
    size_t index = str.find_first_of(pattern, 0);
    while (index != string::npos)
    {
        ret.push_back(str.substr(start, index - start));
        start = index + 1;
        index = str.find_first_of(pattern, start);
    }
    ret.push_back(str.substr(start));
    return ret;
}
```
用Poco中的StringTokenizer
```
#include "Poco/StringTokenizer.h"
#include "Poco/String.h" // for cat
// 分割字符串,s:将被分割的字符串,k:分割符
// 例如: k是 ";,"表示用 ';' 和 ',' 分割
std::vector<std::string> SplitString(std::string s, std::string k)
{
    /*
    Poco::StringTokenizer t1("red, green, blue", ",");
    // "red", " green", " blue"     (note the whitespace)
    Poco::StringTokenizer t2("red,green,,blue", ",");
    // "red", "green", "", "blue"
    Poco::StringTokenizer t3("red ; green , blue", ",;",
        Poco::StringTokenizer::TOK_TRIM);
    // "red", "green", "blue"
    Poco::StringTokenizer t4("red; green,, blue", ",;",
        Poco::StringTokenizer::TOK_TRIM | Poco::StringTokenizer::TOK_IGNORE_EMPTY);
    // "red", "green", "blue"
    std::string ss(Poco::cat(std::string("; "), t4.begin(), t4.end()));
    // "red; green; blue
    */
    Poco::StringTokenizer st(s, k);//这样是不去掉 "" ,当加上 TOK_IGNORE_EMPTY(宏定义为1)即去掉 "" 了。
    std::vector<std::string> vecRet(st.begin(), st.end());
    return vecRet;
}
```
另外一个字符串整体为分割符:(单个字符就跟上面的一样了)
```
//pattern作为一个整体当分割符,(不去掉 "")
vector<string> split(string str, string pattern)
{
    vector<string> ret;
    if (pattern.empty()) return ret;
    size_t start = 0;
    size_t index = str.find(pattern, 0);
    while (index != string::npos)
    {
        ret.push_back(str.substr(start, index - start));
        start = index + pattern.size();
        index = str.find(pattern, start);
    }
    ret.push_back(str.substr(start));
    return ret;
}
```

 

另外,有strtok

char *strtok(char s[], const char *delim);
wchar_t *wcstok(wchar_t s[], const wchar_t *delim)
_tcstok() 对应 TCHAR 的函数
分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。strtok函数会破坏被分解字符串的完整,调用前和调用后的s已经不一样了。
#pragma warning (disable : 4996)
int main()
{
    char s[] = "this is. 192...168.0.1..";
    char *token = strtok(s, " .");//以空格和“.”进行分割,并且不保留空字符串
    while (token)
    {
        cout << token << '\n';
        token = strtok(NULL, " .");
        //_tcstok()
    }
    return 0;
}//结果: this is 192 168 0 1

用其实现的split函数

分割字符串,字符串去除空格
// delim分隔符,所有delim中包含的字符都是分隔符,且不保留空字符串""
#pragma warning (disable : 4996)
std::vector<std::string> split(char* s, const char* delim)
{
    std::vector<std::string> vecRet;
    char* token = strtok(s, delim);
    while (token)
    {
        vecRet.push_back(std::string(token));
        token = strtok(NULL, delim);
    }
    return vecRet;
}

std::vector<CString> split(TCHAR* s, const TCHAR* delim)
{
    std::vector<CString> vecRet;
    TCHAR* token = _tcstok(s, delim);
    while (token)
    {
        vecRet.push_back(CString(token));
        token = _tcstok(NULL, delim);
    }
    return vecRet;
}
View Code

 

还有 CString的 Tokenize()

相关文章:

  • 2022-01-07
  • 2021-11-17
  • 2021-08-08
  • 2022-12-23
  • 2021-10-09
  • 2021-07-28
猜你喜欢
  • 2022-12-23
  • 2021-06-14
  • 2021-08-02
  • 2021-12-07
  • 2021-08-19
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案