我正在寻找与sscanf
相当的c ++。
string a,b,c;
string line = "data1,data2,data3";
如何将data1
分配给"a"
,将data2
分配给b
,将data3
分配给c
。
答案 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>