c ++的新手,即时消息很难在字符串上拆分。我已经在堆栈溢出中看到了一些这样的示例,但是在for循环中循环时,我无法使示例工作。
基本上,我有一个看起来像字符串的数组。
const string userData[] =
{"A1,John,Smith,smithJ@mail.com,42",
"B2,Jane,Doe,jd@gmailcom,121,2",
"C3,Mickey,Mouse,mouseman@mail.com,20"
};
下面是我自己最接近解决方案的地方
string s;
vector<istringstream> streamV;
vector<string> stringV;
for(const auto& str : userData)
{
istringstream nasa { str };
getline(nasa, s, ',');
stringV.push_back(s);
}
cout << stringV[0] << endl;
cout << stringV[1] << endl;
输出
A1
B1
期望的目标: 我想将每个逗号分隔的值添加到向量中。 然后,调出类构造函数,对从字符串到int的最后一个值进行内联类型转换。
编辑1 我了解我的问题类似于The most elegant way to iterate the words of a string 主要区别在于,提供的解决方案不适用于以逗号分隔的列表,并且无法遍历数组/向量。
答案 0 :(得分:2)
尝试以下代码段:
int main()
{
vector<string> sentences =
{ "A1,John,Smith,smithJ@mail.com,42",
"B2,Jane,Doe,jd@gmailcom,121,2",
"C3,Mickey,Mouse,mouseman@mail.com,20"
};
vector<string> results;
for (auto words : sentences) {
stringstream ss(words);
string str;
while (getline(ss, str, ',')) {
results.push_back(str);
}
}
//display result
for (auto word : results) {
cout << word << '\n';
}
return 0;
}
答案 1 :(得分:0)
尝试使用此功能:
std::vector<std::string> split(const std::string& s, char delimiter)
{
std::vector<std::string> splits;
std::string split;
std::istringstream ss(s);
while (std::getline(ss, split, delimiter))
{
splits.push_back(split);
}
return splits;
}
然后将其命名为:
auto userSplitData = split(userData[0], ',');
答案 2 :(得分:0)
您可能已经对建议的解决方案感到满意,但是如果您想要更多面向STL的内容,请查看以下内容:
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
int main()
{
const std::vector<std::string> inputs = {
"A1,John,Smith,smithJ@mail.com,42",
"B2,Jane,Doe,jd@gmailcom,121,20",
"C3,Mickey,Mouse,mouseman@mail.com,2"
};
std::vector<std::string> output;
for(const auto& in : inputs)
{
auto it = std::begin(in);
while (true)
{
auto commaPosition = std::find(it, std::end(in), ',');
output.emplace_back(it, commaPosition);
if (commaPosition == std::end(in))
{
break;
}
it = std::next(commaPosition);
}
}
for (const auto& out : output)
{
std::cout << out << std::endl;
}
return 0;
}