【问题标题】:find words in a text in c++ [closed]在c ++中查找文本中的单词[关闭]
【发布时间】:2013-01-27 11:29:30
【问题描述】:

假设有一个包含这些休闲风格的文本文件:

      name: natalie, sarah
      surname: parker
      age: 24
      contry: dubai

我想得到nataliesarah 作为名字,parker 作为姓氏等等。在此之后,在我的代码中的某处,我需要变量名称、姓氏、年龄(如 natalie、sarah、parker、24 等)。

我认为,首先我需要读取文件并将其存储在一个数组中,然后使用分隔符解析它:“”(空格)或“:”为了解析 <surname: parker> 这个,并且还使用"," 逗号作为分隔符,以便解析 <natalie, sarah>

我可以将文本存储在一个数组中或使用 getline(textfile, size) 来获取行,因为我每次都需要一行。你觉得哪个最合适?以及我们如何进行解析?

【问题讨论】:

  • 为什么不使用类或结构来存储详细信息
  • 看起来不错。试试看,看看你能走多远。然后回来询问您遇到的任何具体问题(如果有的话)。
  • 除非您有性能或大小限制,否则您应该使用众所周知的格式,例如 xml 或完善的数据库,例如 sql
  • 不知道哪个效率最高
  • 除非您是拥有十亿个名字的 Facebook,否则您不必非常高效。对于合理的数据大小,任何东西都可以工作。

标签: c++ string file parsing


【解决方案1】:

你离目标很近。我只是有一点建议:

  • 使用std::map 存储文件中的数据
  • 使用while循环从文件中获取每一行,使用splitboost::split:的字符串获取key和value并将它们存储在map中。

【讨论】:

  • 补充一点,我还会研究标记化:它会派上用场,例如“姓名:natalie, sarah, ..., ...”。
【解决方案2】:

使用正则表达式来求解它更容易。 像这样的模式: "姓名:([\w,]+)姓(\w+)"

【讨论】:

    【解决方案3】:

    我可以想到这样的事情(简化;没有错误检查或优化等;这是未经测试的,但应该可以):

    std::ifstream file(myfile);
    std::string line;
    
    std::map<const std::string, std::string> dataset;
    
    while (file >> line) {
        size_t var_start = line.find_first_not_of(" \t"); // get beginning of the variable name
        size_t var_end = line.find_first_of(":"); // get the end of the variable name
        if (var_start == std::string::npos || var_end == std::string::npos) // any not found?
            continue; // skip this line
        std::string var_name = line.substr(var_start, var_end - var_start); // get the variable name
        std::string var_value = line.substr(var_end + 1); // get the variable content
    
        // now do something, e.g. safe it
        dataset[var_name] = var_value;
    }
    

    【讨论】:

    • 这正是我所需要的,谢谢
    • 什么时候需要使用 dataset[var_name] 怎么称呼?
    • 喜欢 dataset[0] 还是 dataset[name]?
    • 这是一个映射,键是 std::string,因此您可以使用 dataset["name"],但这完全取决于您(您可以将 var_name 与文字进行比较并分配不同的变量)。
    • 如何处理“,”部分?姓名:natalia、sarah 和我应该分别得到 natalia 和 sarah,我该怎么办?
    猜你喜欢
    • 2021-10-09
    • 2017-04-18
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多