c++ - 如何重置 std::count 返回值

标签 c++

std::count 返回一个值,我需要在执行内部 for 循环后将变量“counter”中的所有字符的该值重置为 0。目标是计算一个角色出现的次数。如果此字符在字符串中出现两次,则将一个添加到变量“d”。如果出现 3 次,则将 1 加到变量“e”。

不确定还可以尝试什么,或者是否有可能有更好的功能来实现我的结果。

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

int main() {

    std::string data;

    std::vector<std::string> myString;
    std::vector<char> myChar;

    int d = 0, e = 0;

    std::ifstream inFile;

    inFile.open("C:\\Users\\Administrator\\Desktop\\c++ files\\input2.txt");

    if (!inFile) {

        std::cout << "oops";
    }

    for (int i = 0; i < 1; i++) {

            inFile >> data;
            std::copy(data.begin(), data.end(), std::back_inserter(myChar));    //copy from string data to vector myChar via back inserter.
            char counter = 'a';

            for (int i = 0; i < 26; i++) {

                int myCount = std::count(myChar.begin(), myChar.end(), counter);

                if (myCount == 2) {

                    d++;

                }
                else if (myCount == 3) {
                    e++;

                }

                std::cout << "Counter : " << counter << " myCount : " << myCount << "\n";
                counter++;
            }
        }

        std::cout << "d is: " << d << "\n";
        std::cout << "e is: " << e << "\n";

        return 0;


}

输入文件 -- https://adventofcode.com/2018/day/2

该程序在第一个内部 for 循环中正常工作,但第二个和之后的返回值对于“myCount”变量而言过高(尽管正确)。

最佳答案

std::count 不只是给你一个随机值,它根据你给它的范围的内容给你一个特定的值。您无法更改该行为,您不应该这样做。

相反,请查看该范围。 为什么 std::count 会给出您不期望的值?它们要么“太高”,要么“正确”,不能两者兼而有之;幸好他们是后者。

这是因为您在循环内重复 std::back_insert 到 vector 。随着循环的进行,您会不断计算上次出现的旧字符!

如果您首先清除了myChar,那么您就不会遇到这个问题。或者,理想情况下,将 myChar 的声明放入循环中。

关于c++ - 如何重置 std::count 返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57188234/

相关文章:

c++ - c++中的继承,里面输出

c++ - std::sort 用于 vector 在排序自定义对象时引发错误

C++ MPI 发送接收问题

c++ - 在 C++ 中使用 pthread 杀死其中一个线程时,如何使进程保持事件状态?

c++ - CMake 发现错误的 gcc 版本

c++ - 用于查找到元素集的 id 映射的良好数据结构 (c++)

c++ - 将变量从 C++ 传递到 Matlab(工作区)

c++ - 递归函数(纸笔帮我理解)

C++ std::variant 与 std::any

c++ - Qt - 如何为任意用户获取 "Temp"目录?