【问题标题】:C++ Checking to see if a variable stored in a vector list contains a character of another variable of another listC ++检查存储在向量列表中的变量是否包含另一个列表的另一个变量的字符
【发布时间】:2020-04-16 11:08:29
【问题描述】:

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

Customers.txt

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

零件.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,则将其添加到 counter++。其原因是由于在零件中发现的可变复杂性。如果零件代码等于 A(partCode),则复杂度为 15,如果等于 B,则复杂度为 5。listofParts 包含这些字符的随机分类,一旦计算出所有复杂度的总和,则该函数可以使用附加到此字符以执行计算的 int 值。我与我的尝试的问题是,当它运行时的一些65656565656565656565656565656565656565656566666666666666666666666666666666667676767676767676767676767676767676767676767676786868686868686868686868686868686868686969696969696969696969696969696在控制台作为总被返回。实际的预期输出如下所示。功能问题可以在提供的代码末尾附近找到。

主要代码

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 的每个实例对应的复杂度值可用于上述计算。

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

【问题讨论】:

  • 不清楚你的问题是什么
  • 请阅读最后一段。
  • 您想检查一个字符串是否包含来自第二个字符串的字符并计算它们吗?如果是这样的话,这些字符串是否在向量内并不重要。
  • 问题中似乎有很多不相关的东西。我无法真正区分它,但是例如从文件中读取似乎不是问题,因此您可以将其删除。请阅读minimal reproducible example。将大的东西分成小块是降低复杂性的一项重要技能
  • 在我看来,这堵文字可以归结为“如何计算字符串中给定字符的出现次数”,即std::count(thestring.begin(), thestring.end(), thecharacter)

标签: c++ list file vector counter


【解决方案1】:

将您的示例归结为要点:

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

【讨论】:

  • 好的,谢谢。抱歉这个令人困惑的问题。我可以问一件事。对于参数 const Customer& c,什么值会被解析为复杂性?我理解它是一个参考变量。我在 main 中创建了一个变量 Customer x,但不确定 id 分配给它的值是什么
  • 我不明白你在问什么。它是从robotComplexity 传递过来的,它的Customers 向量来自main 中神秘命名的newVec
  • 是的,我想通了。我也想知道,当它运行时它只返回每个人姓名的第一个字母,但我似乎无法在这里找到任何可以这样做的代码。
  • 这是可能的,因为readcustomerFile 只存储第一个字母。您是否查看了您的 Customers 并确定它们是您所期望的?
  • 啊是的。当我复制 readpartFile 函数时,我为第一个令牌留下了 0 的索引。谢谢你的帮助。
猜你喜欢
  • 2022-11-17
  • 1970-01-01
  • 2020-08-08
  • 1970-01-01
  • 1970-01-01
  • 2017-01-13
  • 1970-01-01
  • 1970-01-01
  • 2014-05-20
相关资源
最近更新 更多