C++字符串分割

简介: C++字符串分割

1. 自己实现split()


void split(const char *s, vector<string> &strs, char delim = ' ') {
    if(s == nullptr) {
        return;
    }
    const char *head, *tail;
    head = tail = s;
    while(*head != '\0') {
        while(*head != '\0' && *head == delim) {
            head++;
        }
        tail = head;
        while(*tail != '\0' && *tail != delim) {
            tail++;
        }
        if(head != tail) {
            strs.push_back(string(head, tail));
            head = tail;
        } else {
            break;
        }
    }
}


字符串s按照delim代表的字符分割,并且放入vector中。


搜索过程中在stackoverflow上,发现了另外两个简单明了的办法。


2. stringstream


int main() {
    string str= "I love world!";
    string str_temp;
    stringstream ss;
    str>>ss;
    while(!ss.eof())
    {
      ss>>str_temp;
      cout<<str_temp<<endl;
  }
}


这个方法的局限性就是没法使用空格以外的字符进行分割字符串


3.istringstream


istringstream str(" this is a sentence"); 
string out;
while (str >> out) {
  cout << out << endl;
}


运行


this 
 is 
 a 
 sentence


4. getline() 实现 split()


void split(const std::string &s, std::vector<std::string> &elems, char delim = ' ') {
    std::stringstream ss;
    ss.str(s);
    std::string item;
    while (std::getline(ss, item, delim)) {
        elems.push_back(item);
    }
}
int main()
{
    string line = "asd fasdf fadf fa";
    vector<string> strs;
    split(line, strs);
    for(auto &s: strs) {
        cout << s << endl;
    }
    return 0;
}


getline函数,顾名思义,是用来获取一行数据的,不过它的第三个参数也可以修改成其他字符,这样就可以将其他字符作为行分割符使用。


不过这种实现的缺点就是,getline每遇到一个行分割符都会返回一次,所以对于分割符连续的情况就束手无策了。


例如:


string str= "dsadsad sdsadasd wwwww eeeee";


打印结果就是:


dsadsad 
sdsadasd 
wwwww 
eeeee
相关文章
|
1月前
|
存储 算法 编译器
【C++ 字符数组的模板特化】面向字符串的C++模板特化:理解与实践
【C++ 字符数组的模板特化】面向字符串的C++模板特化:理解与实践
47 1
|
1月前
|
对象存储 C++
在C++语言中字符串流
在C++语言中字符串流
18 2
|
1月前
|
并行计算 Go C++
2182.构造限制重复的字符串(模拟 贪心 优先队列 C++ Go)
【2月更文挑战第19天】2182.构造限制重复的字符串(模拟 贪心 优先队列 C++ Go)
23 1
|
1月前
|
Go C++
【力扣】2696. 删除子串后的字符串最小长度(模拟 栈 C++ Go实现栈)
【2月更文挑战第18天】2696. 删除子串后的字符串最小长度(模拟 栈 C++ Go实现栈)
34 6
|
1月前
|
存储 C++ 索引
C++ 字符串完全指南:学习基础知识到掌握高级应用技巧
C++的字符串使用`string`类处理,如`string greeting = &quot;Hello&quot;`。字符串连接可通过`+`或`append()`函数实现。访问字符使用索引,如`myString[0]`。`length()`或`size()`可获取长度。`getline()`用于读取整行输入。注意转义字符如`\\&quot;`用于在字符串中嵌入双引号。使用`cin`读取字符串时,空格会终止输入,而`getline()`能读取整行。
25 0
|
5天前
|
存储 编译器 C语言
C++字符串大小写之for语句
C++字符串大小写之for语句
10 0
|
6天前
|
C++
【代码片段】【C++】获取当前时间戳并生成固定格式字符串
【代码片段】【C++】获取当前时间戳并生成固定格式字符串
9 0
|
存储 编译器 Linux
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
|
13天前
|
安全 C++
石头剪子布(字符串解法 C++)
石头剪子布(字符串解法 C++)
17 0
|
22天前
|
C++
C++语言学习数组和字符串应用案例
【4月更文挑战第8天】该文展示了C++中数组和字符串的应用案例。数组示例定义了一个整数数组并访问、修改其元素,计算了元素之和。字符串示例中,定义了一个字符串并遍历、修改字符,进行了字符串拼接、查找子字符串及替换操作。
10 3