gpt4 book ai didi

c++ - 如何比较两个不同文本文件中的两个不同字符串?

转载 作者:行者123 更新时间:2023-11-30 04:16:17 25 4
gpt4 key购买 nike

我是一个c++菜鸟,不知道自己做错了什么。我的任务是比较两个不同的 .txt 文件,每个文件都包含一个项目以及项目的数量和该项目的价格。然后我试图打印项目的名称和价格。假设我正在使用 .txt 文件 namesAndQuantity.txt,其中包括:

3 books
4 pens

还有一个 .txt 文件 namesAndPrice.txt,其中包括:

pens 3.45
books 19.55

我使用的代码只打印出第一个匹配项:

#include <iostream>
#include <fstream>
#include <cmath>

int main(){
string nameOfItemP, nameOfItemQ;
double priceOfItem;
int numberOfItems;
ifstream inData;
ifstream inData2;
inData.open("namesAndQuantity.txt");
inData2.open("namesAndPrice.txt");
while (inData>>numberOfItems>>nameOfItemQ){
while (inData2>>nameOfItemP>>priceOfItem){
if (nameOfItemP==nameOfItemQ){
cout<<nameOfItemQ<<endl;
cout<<priceOfItem;
}
}
}

这段代码只打印出第一行:

books
19.55

我可以做些什么来改善它?

最佳答案

因为第一次之后

while (inData2>>nameOfItemP>>priceOfItem){
if (nameOfItemP==nameOfItemQ){
cout<<nameOfItemQ<<endl;
cout<<priceOfItem;
}

执行,inData2到达终点,不再读取。解决方案是将 open 函数移动到 while 循环中:

while (inData>>numberOfItems>>nameOfItemQ){
inData2.open("namesAndPrice.txt");
while (inData2>>nameOfItemP>>priceOfItem){
if (nameOfItemP==nameOfItemQ){
cout<<nameOfItemQ<<endl;
cout<<priceOfItem;
}
inData2.close();
}

但是,这不是最好的方法。您最好使用 map 来避免嵌套循环。 map 类似于数组,不同之处在于您可以选择使用 string 作为索引:

#include <iostream>
#include <fstream>
#include <string>
#include <map>

using namespace std;

int main() {
// same as before
int numberOfItems;
string nameOfItem;
double price;

// create a map, using string as index and int as value.
map<string, int> items;

ifstream inData("namesAndQuantity.txt");
ifstream inData2("namesAndPrice.txt");

while (inData >> numberOfItems >> nameOfItem)
items[nameOfItem] = numberOfItems;

while (inData2 >> nameOfItem >> price)
cout << nameOfItem << " "
<< items[nameOfItem] << " " << price << endl;

inData.close();
inData2.close();

return 0;
}

输出

pens 4 3.45
books 3 19.55

关于c++ - 如何比较两个不同文本文件中的两个不同字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17822982/

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