C ++ Проверка, содержит ли переменная, хранящаяся в списке векторов, символ другой переменной другого списка - PullRequest
0 голосов
/ 16 апреля 2020

В настоящее время я пишу программу, основной функцией которой является чтение файлов и выполнение расчетов. В настоящее время я работаю над функцией, функция которой заключается в обработке набора вычислений на основе переменных в нескольких текстовых файлах. Ниже приведены два текстовых файла, необходимые для этой функции

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). Если char partCode можно найти в строке listofParts, то это добавляется в счетчик ++. Причина этого кроется в переменной сложности, найденной в деталях. Если код детали равен A (partCode), то сложность равна 15, если его значение равно B, тогда сложность равна 5. listofParts содержит случайный ассортимент этих символов, и после вычисления суммы всех сложностей функция может использовать значения int, прикрепленные к этим символам для выполнения расчетов. Моя проблема с моей попыткой состоит в том, что, когда это бежит, число 6565656565656565656565656565656565656565656666666666666666666666666666666676767676767676767676767676767676767676767676767676767676767676767676767676786868686868686868686868686868969696969696969696969696969696969696 Фактический ожидаемый результат показан ниже. Функция вопрос может быть найдена в конце предоставленного кода.

Основной код

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 могут использоваться для вычисления, показанного выше.

Если требуется какое-либо дальнейшее объяснение, не стесняйтесь спрашивать. Любая помощь приветствуется.

1 Ответ

2 голосов
/ 16 апреля 2020

Сведение вашего примера к основам:

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);
    }
}
...