如何正确地对字符串进行标记

时间:2016-03-26 00:02:18

标签: c++ string token

我正在寻找与sscanf相当的c ++。

  string a,b,c;
  string line = "data1,data2,data3";

如何将data1分配给"a",将data2分配给b,将data3分配给c

2 个答案:

答案 0 :(得分:3)

如果您的分隔符是单个字符,则可以std::getline使用std::istringstream和自定义分隔符。

const auto text = std::string {"alpha,beta,gamma"};
const auto delim = ',';
auto token = std::string {};
auto iss = std::istringstream {text};
while (std::getline(iss, token, delim))
  std::cout << "Parsed token: '" << token << "'\n";

或者您可以使用regular expression

const auto text = std::string {"alpha,beta,gamma"};
const auto pattern = std::regex {"[^,]+"};
const auto first = std::sregex_iterator {text.cbegin(), text.cend(), pattern};
const auto last = std::sregex_iterator {};
for (auto it = first; it != last; ++it)
  std::cout << "Parsed token: '" << it->str() << "'\n";

两种解决方案都可能比使用std::sscanf慢得多。

答案 1 :(得分:1)

在您的情况下,您希望将包含string的{​​{1}}拆分为限制。您可以使用,getline来实现此目标。

首先,您使用stringstream

string更改为流
stringstream

之后,您可以使用stringstream ss(line); 使用分隔符getline将其拆分

,

最后,您可以使用while(getline(ss,tmp,',')) //Here you use string tmp to save it 并将其推送到tmp。这是完整的程序示例。

vector <string>