【问题标题】:Separately reading a word like "a-b-" from a text file and deleting从文本文件中分别读取“a-b-”之类的单词并删除
【发布时间】:2020-08-18 21:04:45
【问题描述】:

第一个问题是我有这样的代码来读取文本文件:

File >> product.projectNo >> product.date
     >> product.productNo >> product.productQ
     >> product.productTotalPrice;

我将productNoproductQproductTotalPrice 写入文件,用- 分隔,因为可能不止一个。以下是文本文件的示例:

17 5 17-7051-10- 9-8-11- 720-616-55-

最后一个720-616-55- (productTotalPrice) 是价格列表。我需要单独阅读并添加它们。所以:720+616+55。我该怎么做?

第二个问题是我需要删除其中任何一个,意思是productNo17-7051-10-,需要删除17-。我该怎么做?

【问题讨论】:

  • 你为什么不一次读一行,然后根据你的规则解析每一行呢?阅读标记化、词法分析和解析。

标签: c++ file text


【解决方案1】:

问题的第一部分是从文件中读取每个单词。这可以使用:

std::string word0, word1;
std::getline(file, word0, ' ');
std::getline(file, word1, ' ');
...

当然,上面的代码假设恰好有一个' '被用作单词之间的分隔符。

下一个问题是解析您的价格。这可以使用std::stoi

size_t index;
int price0 = `std::stoi(word, &index);
word = word.substr(index + 1);
int price1 = `std::stoi(word, &index);
word = word.substr(index + 1);
int price2 = `std::stoi(word);

int totalPrice = price0 + price1 + price2;

这是因为std::stoi 返回第一个字符的索引,该索引不是整数的一部分。所以这将是您的数字之间的- 分隔符。

至于您问题的第二部分:您不会将 17- 作为字符串删除。相反,您应该在将 17 添加到总和之前忽略它,或者在解析后将其从数字列表中删除。

【讨论】:

  • 我一直在努力工作,并在您的著作的启发下进行了更多搜索。已解决,非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-23
  • 2022-06-12
  • 1970-01-01
相关资源
最近更新 更多