我需要创建一个空的向量,然后打开并按字符逐个读取文件,当它看到一个数字时,它会将该字符放回流中,并将相应公司的金额作为数字读取。然后,我需要使用名称和金额构建一个Company对象。
到目前为止我所拥有的......
int main(){
//Function
string readCompanyInfo(double money);
//Handles the file
ofstream company("companymoney.txt");
std::vector<int> v;
int sum (0);
for (int i=1;i<=10;i++) v.push_back(i);
while (!v.empty()) {sum += v.back(); v.pop_back();}
std::cout << sum << '\n';
return 0;
该功能,打开文件和空文件。我将如何阅读文件并获取我在指示中寻找的结果? 感谢您的帮助,我显然很陌生,如果我能看到正确的东西,我将来会有一些工作要做,谢谢你们。
答案 0 :(得分:1)
除了将一个字符读入缓冲区之外,还有更优雅高效的方法。一般的经验法则是将一行文本读入字符串并使用std::istringstream
来解析字符串。在块模式下读取文件最有效。
如果您必须按字符操作并存储到vector
,请在阅读前分配一个大矢量。这将减少std::vector
调整大小的机会,这意味着分配更大的内存块并将原始值复制到新的矢量区域。
使用最少的指令将尽可能多的数据读入矢量。阅读back_inserter
和std::vector
。
接下来,使用一个指针或索引,搜索向量中的数字 复制指针/索引。 如果可能,递减指针/索引,并验证它是否指向美元符号。
其中一个指针/指数是“向前看”。
最有效的方法是使用组或数据块。读取块,搜索块。
您没有说明输入文件中数据的组织方式。
如果数据由制表符或逗号分隔,请在Web和StackOverflow中搜索“c ++ read file逗号分隔”或“c ++ read file tab分隔”。
我假设你正在处理一个文本文件
大多数文本文件每行有一条记录。
在这种情况下,请将一段文本(一行)读入std::string
变量
然后,您可以在变量中搜索“$”,并使用std::istringstream
将值从文本表示转换为数字(double
)。
修改1:
如果你喜欢正则表达式,你可以使用正则表达式搜索字符串或字符向量。