C++ 检查存储在向量列表中的变量是否包含另一个列表的另一个变量的字符

C++ Checking to see if a variable stored in a vector list contains a character of another variable of another list

我目前正在编写一个程序,主要功能是读取文件和执行计算。目前我正在研究一个函数,它的功能是根据多个文本文件中的变量处理一组计算。下面是这个函数需要的两个文本文件

Customers.txt

Carly:Cat:ABCCCCE.
Dodgy Dan:Dog:BCACECC.
Ernie:Ettin:AABCCDD.
Sally:Snake:AEEEEEE.

Parts.txt

A:Head:1:2:15.
B:Torso:0:6:5.
C:Leg:0:4:6.
D:Arm:0:4:8.
E:Tail:0:6:2.

robotComplexity() 的主要功能也是接收两个向量,一个用于零件,一个用于客户,并比较每个向量(partCode 和 listofParts)中的一个变量。如果可以在字符串 listofParts 中找到 char partCode,则将其添加到计数器 ++。这样做的原因是零件中发现的可变复杂性。如果部件代码等于 A(partCode),则复杂度为 15,如果其等于 B,则复杂度为 5。listofParts 包含这些字符的随机分类,一旦计算出所有复杂度的总和,则该函数可以使用附加到此字符以执行计算的 int 值。 My problem with my attempt is that when it runs a number 65656565656565656565656565656565656565656566666666666666666666666666666666667676767676767676767676767676767676767676767676786868686868686868686868686868686868686969696969696969696969696969696 is returned in the console as the total.实际预期输出如下所示。函数是问题可以在提供的代码末尾附近找到。

主要代码

int main()
{
    auto parts =  readpartFile();
    auto newVec = readcustomerFile();
    robotComplexity(parts,newVec);
    getch();
    return 0;
}

std::stringstream partsList(
    R"(A:Head:1:2:15.
B:Torso:0:6:5.
C:Leg:0:4:6.
D:Arm:0:4:8.
E:Tail:0:6:2.)");

std::stringstream customerList(
    R"(A:Head:1:2:15.
B:Torso:0:6:5.
C:Leg:0:4:6.
D:Arm:0:4:8.
E:Tail:0:6:2.)");

double robotComplexity(std::vector<Part> const& parts,std::vector<Customer> const& customers)
{
    double Robotcomplexity;
    vector<Part> part = parts;
    vector<Customer> customer = customers;
    int total = 0;

for(Part par: parts) {

for (Customer cus :customers)
{
for (int i = 0; i < cus.listofParts.size(); i++) {

    if(cus.listofParts.find(par.partCode) != string::npos) {
    total =+ par.partCode;
      cout << cus.customerName << " robot contains parts. " << cus.listofParts << "The sum of complexities equals " << total;
    }

}
}
}
return Robotcomplexity;
}

此函数的示例输出为

"Dodgy Dans robot contains parts BCACECC. The sum of complexities equals 46"

46 来自于 ABCDE 中的复杂性。 B 的复杂度为 5,C 为 6,A 为 15,E 为 2。这些值根据它们出现的次数达到数字 46 来求和。

我的问题是如何检查变量 listofParts 是否包含 partCode(ABCDE) 的字符,如果包含,计算它们。在此之后,每个 partCode 实例对应的复杂度值可用于上面所示的计算。

如果需要任何进一步的解释,请随时询问。任何帮助表示赞赏。

将您的示例归结为要点:

struct Customer {
    std::string listofParts;
};

struct Part {
    char partCode;
    int complexity;
};

float complexity(const Customer& c, const std::vector<Part>& parts)
{
    float total = 0;
    for (const auto& p: parts)
    {
        total += std::count(c.listofParts.begin(), c.listofParts.end(), p.partCode) 
                 * p.complexity;
    }
    return total;
}

void robotComplexity(const std::vector<Part>& parts, const std::vector<Customer>& customers)
{
    for (const auto& cus :customers)
    { 
          cout << cus.customerName 
               << " robot contains parts. " 
               << cus.listofParts 
               << "The sum of complexities equals " << complexity(cus, parts);
    }
}