如何重置标准::计数返回值
How to reset std::count return value
std::count 返回一个值,我需要在执行内部 for 循环后将变量"counter"中的所有字符的值重置为 0。目标是计算一个角色出现的次数。如果此字符在字符串中出现两次,请将一个添加到变量"d"中。如果它出现三次,则向变量"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
循环内的向量。随着循环的进行,您不断计算上次的旧字符!
如果您首先清除myChar
那么您就不会遇到问题。或者,理想情况下,将myChar
声明带入循环。
一些修复
1( 出现错误时,程序应结束,而不是继续:
if (!inFile)
{
std::cout << "oops";
return 1;
}
2( a( myChar
正在累积所有以前读取的单词的所有字符,因此在使用循环的每次传递之前都必须清除它,最好将其声明移动到所需的块中;
b( 如果您只是使用计数器进行计数但不使用它,最好迭代数据 - 在这种情况下,摆脱i
并使用字符checked_char
进行迭代:
while (inFile >> data)
{
std::vector< char > myChar;
std::copy(data.begin(),
data.end(),
std::back_inserter(myChar)); //copy from string data to vector myChar via back inserter.
for (char checked_char = 'a'; checked_char <= 'z'; ++checked_char)
{
int myCount = std::count(myChar.begin(), myChar.end(), checked_char);
if (myCount == 2)
{
d++;
}
else if (myCount == 3)
{
e++;
}
std::cout << "Counter : " << checked_char << " myCount : " << myCount << "n";
}
}
相关文章:
- 从python中调用C++函数并获取返回值
- 为什么模板类中的对象不能返回值
- 返回值优化:显式移动还是隐式
- lock_guard是否保护返回值
- 调用CreateProcess()并获取字符串的返回值
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- 编译器警告:执行到达值返回函数的末尾而不返回值
- 查找 GCD:并非所有控制路径都返回值
- 在 Arduino 上使用 sscanf 会导致与 const char * 不匹配,并且返回值始终相同,尽管输入值不同
- 将返回值存储在函数指针数组的指针中是如何工作的?
- 如何从 std::thread 返回值
- 将返回值从 exe 传递到 bat,并将其传递给 C# 中的进程
- 方法错误"not all control paths return a value"和方法不返回值
- 如何读取 C++ SAFEARRAY**,该 SAFEARRAY** 是 COM 互操作的结果,其中 C# 返回值为
- 对fread的返回值感到困惑
- 程序不向函数返回值
- 如何在另一个函数中使用返回值作为参数?
- 是否有一些东西限制了未来引入多个返回值C++标准?
- 如何重置标准::计数返回值
- C++标准是否保证函数返回值具有常量地址?