gpt4 book ai didi

c++ - 在 C++ 中比较 char

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:26:33 25 4
gpt4 key购买 nike

这是我从中获取数据的文本文件

10
wood 8
gold 7
silver 5
gold 9
wood 1
silver 1
silver 9
wood 3
gold 5
wood 7

我应该找到具有相同名称的商品并将它们的所有数量相加,所以最终结果应该是 wood=19;黄金=21;白银=15。这是我到目前为止所做的

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
ifstream read("data.txt");
int n;
read >> n;
char name[10][n]; // 10 symbols are given for items name
int amount[n];
for(int i=0; i<n; i++)
{
read.ignore(80, '\n');
read.get(name[i], 10);
read >> amount[i];
}

for(int i=0; i<n; i++)
{
for(int d=1; d<n; d++)
{
if(name[i]==name[d] && i!=d)
{

}
}
}
return 1;
}

目前的问题是 name[i]==name[d] 没有反应,例如 name[i]="wood"name[d]="wood"

最佳答案

在C++中,我们倾向于使用std::stringchar[] 上。第一个重载了相等运算符,因此您的代码应该可以工作。对于后者,您需要 strcmp()实现您的目标。

现在你的代码可能会像这样(我使用了 std::vector,但你可以使用字符串数组,但我不推荐它):

#include <iostream>
#include <fstream>
#include <string>
#include <vector>

using namespace std;

int main()
{
ifstream infile("data.txt");
int n;
infile >> n;
vector<string> name(n);
int amount[n], i = 0;
while (infile >> name[i] >> amount[i])
{
cout << name[i] << " " << amount[i] << endl;
i++;
}
// do your logic
return 0;
}

顺便说一下,你可以使用 std::pair , 为了使您的代码更具可读性,其中第一个成员是名称,第二个是金额。


与您的问题无关,main() 倾向于在一切正常时返回 0;,而您返回 1。

PS:这是一个工作示例:

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <utility>

using namespace std;

int main()
{
ifstream infile("data.txt");
int n;
infile >> n;
vector<string> name(n);
int amount[n], i = 0;
while (infile >> name[i] >> amount[i])
{
// cout << name[i] << " " << amount[i] << endl;
i++;
}


vector< pair<string, int> > result;
bool found;
for(int i = 0; i < name.size(); ++i)
{
found = false;
for(int j = 0; j < result.size(); ++j)
{
if(name[i] == result[j].first)
{
result[j].second += amount[i];
found = true;
}
}
if(!found)
{
result.push_back({name[i], amount[i]});
}
}

cout << "RESULTS:\n";
for(int i = 0; i < result.size(); ++i)
cout << result[i].first << " " << result[i].second << endl;
return 0;
}

输出:

Georgioss-MacBook-Pro:~ gsamaras$ g++ -Wall -std=c++0x main.cpp 
Georgioss-MacBook-Pro:~ gsamaras$ ./a.out
RESULTS:
wood 19
gold 21
silver 15

关于c++ - 在 C++ 中比较 char,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44551831/

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