美文网首页
C++分割字符串

C++分割字符串

作者: 克罗地亚催眠曲 | 来源:发表于2019-01-17 10:32 被阅读5次

C++的string默认没有split函数,但是split函数又是如此常用,今天在网上查资料学习一下。
方法一:使用getline

#include <iostream>
#include <sstream>
#include <vector>
using namespace std;
// 后面的代码中省略头文件和命名空间

int main()
{
    string s = "Let me split this into words";
    vector<string> v;
    istringstream iss(s);
    string token;
    while(getline(iss, token, ' ')) {
        v.push_back(token);
    }
    for(auto i : v) {
        cout << i << endl;
    }
    return 0;
}

方法二:使用iterator

int main()
{
    string s = "Let me split this into words";
    istringstream iss(s);
    vector<string> result(istream_iterator<string>(iss), (istream_iterator<string>()));
    for(auto i : result) {
        cout << i << endl;
    }
    return 0;
}

有一点不理解的地方是(istream_iterator<string>())为什么必须在外面加个括号,不加括号就会报错,这个问题先暂时搁在这。
方法三:
方法二性能不好的原因在于操作符<<。除了在空格处停止,<<操作符做了很多额外的操作,比如格式化,读写一些flags,构建对象等等,其实我们并不需要这些操作。
我们需要控制string<<操作符的行为。实现这个目的有多种方法,这里我们选择继承string类型。

class WordDelimitedByComma : public string 
{};

istream& operator >> (istream& is, WordDelimitedByComma& output) {
    getline(is, output, ',');
    return is;
};

int main()
{
    string s = "Let,me,split,this,into,words";
    istringstream iss(s);
    vector<string> result(istream_iterator<WordDelimitedByComma>(iss), (istream_iterator<WordDelimitedByComma>()));
    for(auto i : result) {
        cout << i << endl;
    }
    return 0;
}

更加完善的做法是使用模板类,可以用来选择不同的分隔符。

template<char T>
class WordDelimitedByComma : public string 
{};

template<char T>
istream& operator >> (istream& is, WordDelimitedByComma<T>& output) {
    getline(is, output, T);
    return is;
};

int main()
{
    string s = "Let,me,split,this,into,words";
    istringstream iss(s);
    vector<string> result(istream_iterator<WordDelimitedByComma<','>>(iss), (istream_iterator<WordDelimitedByComma<','>>()));
    for(auto i : result) {
        cout << i << endl;
    }
    return 0;
}

暂时先用这三种方法就能满足平时的需要。个人觉得方法一用起来更加方便一些。

参考:
https://www.fluentcpp.com/2017/04/21/how-to-split-a-string-in-c/

相关文章

  • 使用boost::split_iterator进行字符串分割

    代码非常简单,实际上就是根据一个分割字符串组合,来返回分割后的字符串列表。在C++中,实际返回一个iterator...

  • C++ 读取txt,csv文件

    1、C++ 读取txt文件 2、C++ 读取csv文件附上一个分割字符串的功能函数,根据自己情况修改吧

  • 字符串分割-C++

  • C++字符串分割

    最近在研究C++,遇到一个问题需要将类似如下的字符串分割开:17;"_testCube##e17##13##Sma...

  • c++分割字符串

    1、find函数原型:size_t find ( const string& str, size_t pos = ...

  • C++分割字符串

    C++的string默认没有split函数,但是split函数又是如此常用,今天在网上查资料学习一下。方法一:使用...

  • C++字符串分割

    很多人对C++的刻板印象是C++不适合处理字符串,其实C++也是有很方便的函数可以处理字符串的。下面我们来讲一下C...

  • c++ 字符串分割处理

    第一种方式 第二种方式

  • 【2017-08-22】字符串及文本的处理(一)

    字符串的分割与匹配 字符串分割如何根据指定的分割符将一个字符串切割str.split()仅用于简单的分割符处理,只...

  • C++字符串分割方法总结

    在一些编程练习中,经常会对字符串进行处理,往往处理之前都会对字符串进行分割来提取各部分信息。在C++中虽然没有像p...

网友评论

      本文标题:C++分割字符串

      本文链接:https://www.haomeiwen.com/subject/mfsorqtx.html