字符串分割算法

因为做华为上机题的时候,经常会碰到字符串分割的问题,为了以后使用方便,所以写了一个自定义的库函数,写了三种方法,经过大量编程题的考验。

  • 方法一

    使用char作为分隔符,这种比较适用于简单的字符串分割,比如IP地址的分割,坐标的值读取

  • 方法二

    使用string作为分隔符,这时候的分隔符可以是多个字符的,这种稍微复杂一些,但是原理大致相同

  • 方法三

    使用头尾指针法(一开始使用的方法,后来觉得容易出错就常用方法一了)

  • 源代码

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;

/************************************************************ * 函 数 名:vector<string> Split(string str, string delim = " ") * 函数功能:分割字符串 * 函数参数:str-待分割的字符串,delim-分割串,默认空格 * 返 回 值:分割字符串 * 作 者:Elvan * 创建日期:2018-07-13 * **********************************************************/
vector<string> Split(string str, string delim = " ")
{
    vector<string> res;
    if (str == "")
        return res;
    str += delim; //方便后续操作
    for (size_t i = 0; i < str.size(); i++)
    {
        size_t pos = str.find(delim, i);
        if (pos != -1)
        {
            string temp = str.substr(i, pos - i);
            if (temp != "")
                res.push_back(temp);
            i = pos + delim.size() - 1;
        }
    }
    return res;
}

/************************************************************ * 函 数 名:vector<string> Split(string str, char delim = ' ') * 函数功能:分割字符串 * 函数参数:str-待分割的字符串,delim-分割字符,默认空格 * 返 回 值:分割字符串 * 作 者:Elvan * 创建日期:2018-07-13 * **********************************************************/
vector<string> Split(string str, char delim = ' ')
{
    vector<string> res;
    if (str == "")
        return res;
    str = str + delim; //方便后续操作
    for (size_t i = 0; i < str.size(); i++)
    {
        size_t j = i;
        for (; j < str.size(); j++)
        {
            if (str[j] == delim)
            {
                string temp = str.substr(i, j - i);
                if (temp != "")
                    res.push_back(temp);
                break;
            }
        }
        i = j;
    }
    return res;
}

/************************************************************ * 函 数 名:vector<string> Split(char *str, char delim = ' ') * 函数功能:分割字符串 * 函数参数:str-待分割的字符串,delim-分割字符,默认空格 * 返 回 值:分割字符串 * 作 者:Elvan * 创建日期:2018-07-13 * **********************************************************/
vector<string> Split(char *str, char delim = ' ')
{
    vector<string> res;
    if (str == NULL)
        return res;
    char *head, *tail;
    head = tail = str;
    while (*head != '\0')
    {
        while (*head != '\0' && *head == delim)
            head++;
        tail = head;
        while (*tail != '\0' && *tail != delim)
            tail++;
        res.push_back(string(head, tail));
        head = tail;
    }
    return res;
}

int main(int argc, char const *argv[])
{
    string str = "a,b,cd,1,23,#$,,^&";

    vector<string> res1 = Split(str, ",");
    for (size_t i = 0; i < res1.size(); i++)
        cout << res1[i] << endl;
    cout << "---------------" << endl;

    vector<string> res2 = Split(str, ',');
    for (size_t i = 0; i < res2.size(); i++)
        cout << res2[i] << endl;
    cout << "---------------" << endl;

    char s[100] = "a,b,cd,1,23,#$,,^&";
    vector<string> res3 = Split(s, ',');
    for (size_t i = 0; i < res3.size(); i++)
        cout << res3[i] << endl;
    return 0;
}
  • 运行结果
a
b
cd
1
23
#$
^&
---------------
a
b
cd
1
23
#$
^&
---------------
a
b
cd
1
23
#$
^&
    原文作者:HuStanding
    原文地址: https://blog.csdn.net/weixin_38169413/article/details/81610165
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞