c++ - 使用 istringstream 将 std::string 标记化为 std::map

标签 c++ string parsing vector stl

我有一个包含如下数据的 vector :

std::vector<std::string> v;

v[0] = "first:tom";
v[1] = "last:jones";

我想遍历 vector 并在 : 处解析并将结果放入 std::map

std::vector<std::string> v;
std::map<std::string, std::string> m;
std::pair<std::string, std::string> p;

for(int i = 0; i < v.size(); i++) 
{
    std::cout << v[i] << std::endl;

    std::istringstream oss(v[i]);
    std::string token;

    while(getline(oss, token, ':')) 
    {
        m.insert(std::pair<std::string, std::string>("", ""));
    }               
 }

我一直坚持插入 std::map,因为我看不到解析如何为我提供可以插入到 map 中的两个部分。

两者都不是 v[i]。

我要:

m.insert(std::pair<std::string, std::string>("first", "tom"));
m.insert(std::pair<std::string, std::string>("last", "jones"));   

谁能解释一下我的困难?

最佳答案

尝试

std::vector<std::string> v;
std::map<std::string, std::string> m;

for(int i = 0; i < v.size(); i++) 
{
    std::cout << v[i] << std::endl;

    size_t sepPosition = v[i].find (':');
    //error handling
    std::string tokenA = v[i].substr(0, sepPosition);
    std::string tokenB = v[i].substr(sepPosition + 1)

    m.insert(std::pair<std::string, std::string>(std::move(tokenA), std::move(tokenB)));            
 }

关于c++ - 使用 istringstream 将 std::string 标记化为 std::map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16822879/

相关文章:

java - 在保留之前自动大写字符串

java - 解析 JSONObjects 和 JSONArrays 的最佳方式

java - 如何使用Java API通过XSLT解析xml字符串并仅在内存中生成输出?

c++ - 编译器不匹配模板类的嵌套类的非成员运算符<()

c++ - 在C++中,对象(如队列、映射)的名称是引用(还是指针)?

php - 如何在laravel 5.2中仅显示字符串的一部分?

c# - 我必须使用什么正则表达式来分割它?

python - 如何访问同一标签的两个条目中的第二个?

c++ - 从C++中的对象中获取数组

C++ promise / future : Which to return from a function?