C ++:用'\ t'分隔符分隔char *

时间:2017-04-12 22:58:56

标签: c++ boost

我一直在解决这个问题已经有一段时间了,似乎无法找到一个简单的解决方案,不涉及手工解析char *。我需要用'\ t'来分割我的char *变量,我尝试了以下方法:

方法1:

  char *splitentry;
  std::string ss;

  splitentry = strtok(read_msg_.data(), "\\t");
  while(splitentry != NULL)
  {
    std::cout << splitentry << std::endl;
    splitentry = strtok(NULL, "\\t");
  }

使用输入'\ tthis \ tis \ ta \ ttest' 结果输出:

his
is
a
es

方法2:

std::string s(read_msg_.data());

boost::algorithm::split(strs, s, boost::is_any_of("\\t");
for (int i = 0; i < strs.size(); i++)
  std::cout << strs.at(i) << std::endl;

创建相同的输出。 我尝试过使用boost :: split_regex并使用“\\ t”作为我的正则表达式值,但没有任何东西被拆分。我必须自己拆分它,还是我不正确地解决这个问题?

1 个答案:

答案 0 :(得分:0)

我会尝试通过坚持std::函数来使事情变得更简单。 (p.s.你从不使用它:std::string ss;

为什么不做这样的事情?

方法1:std::istringstream

std::istringstream ss(read_msg_.data());
std::string line;
while( std::getline(ss,line,ss.widen('\t')) )
    std::cout << line << std::endl;

方法2:std::string::substr(我喜欢的方法,因为它更轻)

std::string data(read_msg_.data());
std::size_t SPLITSTART(0); // signifies the start of the cell
std::size_t SPLITEND(0);   // signifies the end of the cell
while( SPLITEND != std::string::npos ) {
    SPLITEND = data.find('\t',SPLITSTART);
    // SPLITEND-SPLITSTART signifies the size of the string
    std::cout << data.substr(SPLITSTART,SPLITEND-SPLITSTART) << std::endl;
    SPLITSTART = SPLITEND+1;
}