21xrx.com
2024-12-23 00:39:50 Monday
登录
文章检索 我的文章 写文章
C++字符串切分(split)
2023-06-23 04:14:15 深夜i     --     --
C++ 字符串 切分 Split 分割符

在C++中,字符串是一种基本的数据类型,其常用的操作之一就是字符串切分。字符串切分即将一个字符串按照指定的分隔符分割成多个子串。C++中提供了许多方法可以实现字符串切分,本文将分别介绍这些方法。

1. stringstream

stringstream是C++中的标准I/O库的一部分,它提供了处理字符串的方法。使用stringstream可以将一个字符串按照指定的分隔符切分成多个子串,并存储在字符串流中。然后通过字符串流的操作符可以逐一获取这些子串。

代码示例:


#include <iostream>

#include <sstream>

#include <vector>

using namespace std;

vector<string> split(string s, char delimiter) {

  vector<string> result;

  stringstream ss(s);

  string item;

  while (getline(ss, item, delimiter)) {

    result.push_back(item);

  }

  return result;

}

int main() {

  string s = "hello world, how are you?";

  char delimiter = ' ';

  vector<string> dividedStrings = split(s, delimiter);

  for (auto x : dividedStrings)

    cout << x << endl;

  

  return 0;

}

2. strtok

strtok是C标准库中的字符串处理函数,通过调用strtok函数可以将一个字符串按照指定的分隔符进行切分,并返回第一个切分出来的子串。之后可以重复调用strtok函数继续获取其他子串。

代码示例:


#include <iostream>

#include <cstring>

#include <vector>

using namespace std;

vector<string> split(string s, char delimiter) {

  vector<string> result;

  char *token = strtok(&s[0], &delimiter);

  while (token != NULL) {

    result.push_back(string(token));

    token = strtok(NULL, &delimiter);

  }

  return result;

}

int main() {

  string s = "hello world, how are you?";

  char delimiter = ' ';

  vector<string> dividedStrings = split(s, delimiter);

  for (auto x : dividedStrings)

    cout << x << endl;

  

  return 0;

}

3. boost

boost是C++中的一个流行的开源库,提供了大量的扩展功能,包括字符串处理。boost中的split函数可以将一个字符串按照指定的分隔符进行切分,并返回一个子串列表。

代码示例:


#include <iostream>

#include <boost/algorithm/string.hpp>

#include <vector>

using namespace std;

using namespace boost;

vector<string> split(string s, char delimiter) {

  vector<string> result;

  split(result, s, is_any_of(string(1, delimiter)));

  return result;

}

int main() {

  string s = "hello world, how are you?";

  char delimiter = ' ';

  vector<string> dividedStrings = split(s, delimiter);

  for (auto x : dividedStrings)

    cout << x << endl;

  

  return 0;

}

总结

本文介绍了三种实现C++中字符串切分的方法,分别是stringstream、strtok和boost。每种方法都有其优点和缺点,开发者可以根据具体需求选择相应的方法来实现字符串切分。在实现过程中需要注意字符串本身可能包含其它的特殊字符,这些字符需要特殊处理来避免在切分过程中出现不必要的错误。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复