gpt4 book ai didi

c++ - 将输入文件中的整数相加

转载 作者:行者123 更新时间:2023-12-01 14:48:26 25 4
gpt4 key购买 nike

我有一个看起来像这样的代码

#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>

struct Bill{
std::string name;
int bill_value;
};

enum Status{abnorm, norm};

bool read(std::ifstream &f, Bill &e, Status &st);


int main()
{
std::ifstream x("inp.txt");
if (x.fail() ) {
std::cout << "Error!\n";
return 1;
}

Bill dx;
Status sx;
int s = 0;
while(read(x,dx,sx)) {
s += dx.bill_value;
}

std::cout << "Today income: " << s << std::endl;
return 0;
}

bool read(std::ifstream &f, Bill &e, Status &st){
std::string line;
getline(f,line);
if (!f.fail() && line!="") {
st = norm;
std::istringstream in(line);
in >> e.name;

std::string product;
int value;
e.bill_value= 0;
while( in >> product >> value) e.bill_value+= value;
}
else st=abnorm;

return norm==st;
}

名为 inp.txt 的输入文件看起来像这样:
Joe tv 1200 mouse 50000
Peter glass 8000
Harry mouse 8200 usb 8000 headphones 98900
David book 500 800 mouspad 900
Liam phone 8000 cooler 3000 headphones 3000
Daniel laptop 700 pot 9000

第一个总是客户的名字,然后是他购买的产品及其值(value)。

例如彼得以 8000 元买了一杯,而大卫以两种不同的价格买了两本书。

这就是我的问题出现的地方,因为在 David 的行中,程序只返回第一本书的值(value),而不是行的总和,我想知道这家商店赚了多少利润,所以我需要计算大卫的账单的总和。

最佳答案

file

std::ifstream file;

现在,以下应该可以工作,结果包含在 accu 中:
int accu = 0;
for (std::string line; std::getline(file,line);)
{
// replace non-spaces and non-digits by nothing
// thus only spaces and digits are left
std::string numbers = std::regex_replace(line, std::regex(R"([^\\d])"), "");

std::stringstream ss(numbers);
for (int price; ss >> price;)
{
accu += price;
}
}

首先,我们逐行读取文件。
对于每一行,我们去除非数字字符而不是空格,因为我们需要它们来分隔数字。使用 std::stringstream我们提取给定的数字。
此外,我利用
#include <sstream>
#include <string>
#include <regex>

版本 c++11应该足够了。

注意:当名称或单词包含其他数字或数字时,结果显然是不正确的。可以扩展正则表达式以消除数字,以部分解决此问题。否则,需要有关文件结构的更多信息。

关于c++ - 将输入文件中的整数相加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60800030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com