我一直在解决这个问题已经有一段时间了,似乎无法找到一个简单的解决方案,不涉及手工解析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”作为我的正则表达式值,但没有任何东西被拆分。我必须自己拆分它,还是我不正确地解决这个问题?
答案 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;
}