算法随笔-根据指定分隔符分割字符串

版权声明:QQ:763905926 未经允许请勿转载,转载请注明出处! https://blog.csdn.net/lms1008611/article/details/87304243

    新的一年到来,第一周总是没什么状态,就随便写写简单的一些算法,今天就来实现一个字符串分割。
    需求为:根据指定分割符,分割字符串,并将分割好的各个子串存入vector向量中。

举例:假如存在字符串char str[] = "123,456,789,abc,def",那么按逗号','作为分割符,最终vector向量中的内容便为:vector<string> result  = {"123", "456", "789", "abc", "def"}

代码实现起来比较简单,就不做什么分析了,下边直接贴代码:

#include <stdio.h>
#include <vector>
#include <string>
#include <iostream>
#include <string.h>
#include <assert.h>

using namespace std;

//字符串分割函数
/*
* src:待分割的字符串
* splite:分割符
* result: 存放分割结果
*/
void SpliteStr(const char* src, char splite, vector<string>& result)
{
    assert(src);

    string str;
    char szBuf[256] = {0};
    char szTmp[128] = {0};
    char *pc = NULL;
    bool isFound = false;

    strncpy(szBuf, src, strlen(src));

    while(1)
    {
        pc = NULL;
        pc = strchr(szBuf, splite);
        if(!pc)
        {
            break;
        }
        isFound = true;

        memset(szTmp, 0, sizeof(szTmp));
        strncpy(szTmp, szBuf, pc-szBuf);
        strcpy(szBuf, pc+1);
        szTmp[strlen(szTmp)] = '\0';
        szBuf[strlen(szBuf)] = '\0';
        str = szTmp;
        result.push_back(str);
    }

    if(isFound && (strlen(szBuf)>0))
    {
        str = szBuf;
        result.push_back(str);
    }
}

//main函数,用于验证字符串分割功能
int main(int argc, char* argv[])
{
    char testStr[] = "123,456,789,abc,def";

    vector<string> result;
    SpliteStr(testStr, ',', result);

    vector<string>::iterator iter;

    for(iter=result.begin(); iter!=result.end(); iter++)
    {
        cout << *iter << endl;
    }
    return 0;
}

使用g++编译一下,执行便能得到我们想要的效果:

猜你喜欢

转载自blog.csdn.net/lms1008611/article/details/87304243