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

find words in a text in c++

本文关键字:查找 单词 文本 C++      更新时间:2023-10-16

假设有一个文本文件,其中包含休耕样式的以下内容:

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

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

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

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

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

  • 使用 std::map 存储文件中的数据
  • 使用
  • while 循环从文件中获取每一行,使用 split 或 boost::按 : 拆分字符串来获取键和值并将它们存储在 map 中。

使用正则表达式更轻松地求解它。像这样的模式:"name:([\w,]+)surname(\w+)"

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

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