-1

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

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

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

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

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

4

3 回答 3

1

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

  • 使用std::map存储文件中的数据
  • 使用 while 循环从文件中获取每一行,使用splitboost::split the string by:获取键和值并将它们存储在 map 中。
于 2013-01-27T11:39:17.097 回答
1

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

于 2013-01-27T11:57:39.987 回答
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;
}
于 2013-01-27T11:38:43.587 回答