在c ++中查找文本中的单词

时间:2013-01-27 11:29:31

标签: c++ string file parsing

假设有一个文本文件包含以下风格:

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

我希望nataliesarah作为名称,parker作为姓氏,依此类推。在此之后,在我的代码中的某处我需要变量名称,姓氏,年龄(如natalie,sarah,parker,24等...)。

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

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

3 个答案:

答案 0 :(得分:1)

你非常接近目标。我只是有一些建议:

  • 使用std::map存储来自文件
  • 的数据
  • 使用while循环从文件中获取每一行,使用splitboost::split :之前的字符串获取键和值并将其存储在地图中。

答案 1 :(得分:1)

使用正则表达式可以更轻松地解决问题。 这样的模式: “名称:([\ W,] +)姓氏(\ W +)”

答案 2 :(得分:0)

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

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;
}