【问题标题】:split function for C++C++ 的分割函数
【发布时间】:2011-09-28 12:18:20
【问题描述】:

C++ 有没有类似于 Java 的拆分类型函数?我知道忽略,但我不太了解它,以及它将如何适用于我的情况。

我的输入是:

{
  item = ball
  book = lord of the rings
  movie = star wars
}

给定的输入是<attribute> = <value>,我必须将两者存储在不同的字符串或整数中(取决于值,例如,如果它是数字,则使用整数)。

【问题讨论】:

  • “忽略”是什么意思,为什么您认为模板与拆分字符串有很大关系?查看 std::string 的文档以了解它的内容。
  • @bmargulies 在java API 中有一个str.split("=") 类型函数,在c++ API 中有一个cin.ignore(1,"=")` 类型函数,我'我尝试过使用忽略,但我不知道如何摆脱这些括号
  • How to split a string in C++? 的可能重复项
  • 我认为他可以使用那个答案(我实际上把它扔进了我的),但他可能一直在寻找一些东西来用 = 符号进行标记,而这个问题不会被涵盖- 所以我认为这有点不同。

标签: c++ string templates split


【解决方案1】:

使用Boost::tokenizer 做您想做的事。来自手册:

// simple_example_1.cpp
#include<iostream>
#include<boost/tokenizer.hpp>
#include<string>

int main(){
   using namespace std;
   using namespace boost;
   string s = "This is,  a test";
   tokenizer<> tok(s);
   for(tokenizer<>::iterator beg=tok.begin(); beg!=tok.end();++beg){
       cout << *beg << "\n";
   }
}

【讨论】:

  • 它适用于 icc 和 g++。你安装了boost吗?您遇到什么错误?
【解决方案2】:

使用 strtok():http://www.cplusplus.com/reference/clibrary/cstring/strtok/

只知道它不是可重入的,因为它使用内部静态变量,所以不要在嵌套循环或类似的情况下调用它两次。

和编辑:

这是一个非常酷的 SO 解决方案,它将用空格标记整个字符串 - 您必须在 = 之后将值一起处理,但它会很好地教您 STL :)

Split a string in C++?

【讨论】:

  • 如果它的可重入性不足以调用嵌套循环,那么它肯定不是线程安全的——我认为任何询问如何拆分字符串的人都不需要担心这种复杂性:p
  • @w00te strtok 在我的情况下不起作用...因为我可以输入类似于item = baseball bat 并且棒球棒必须是一个字符串,strtok 会将其分成两个单词跨度>
猜你喜欢
  • 1970-01-01
  • 2011-07-12
  • 2011-08-29
  • 2020-05-19
  • 2018-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-06
相关资源
最近更新 更多