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/