gpt4 book ai didi

c++ - 当 char {'0' 用作查找时,std::map '0' ,0} 对会导致逻辑错误

转载 作者:太空宇宙 更新时间:2023-11-04 15:14:45 25 4
gpt4 key购买 nike

我创建了一个使用 char 和 int 映射的函数,这样当一个数字作为字符串传递时,我可以检查每个字符以确保它是一个 int。然后我获取该字符串并将其转换为纯 int。出于某种原因,当它检查“0”时,它会在找到时抛出错误。我知道有更好的方法可以做到这一点,而且我已经在我的大型项目中实现了很多。关于正在发生的事情,这是一个纯粹的学术问题。

主要.cpp

#include <iostream>
#include <string>
#include <map>

class Logic {

public:
Logic();
std::map <char, int> IsNumber;
bool CheckForInterger(std::string);
int StringToInt(std::string);
};


Logic::Logic() {
IsNumber = { { '0',0 },{ '1',1 },{ '2',2 },{ '3',3 },{ '4',4 },{ '5',5 },
{ '6',6 },{ '7',7 },{ '8',8 },{ '9',9 } };
}

bool Logic::CheckForInterger(std::string word) {
for (char character : word) {
if (IsNumber[character]) {
//do nothing and check next char
}
else {
std::cout << "\n\"" << character << "\" is not a Number.\n\n";
return true;
}
}
return false;
}

int Logic::StringToInt(std::string word) {
int number;
number = std::stoi(word, nullptr, 10);
return number;
}

int main() {
Logic ThisRound;
bool notint;
bool quit = false;
std::string newnumber;
do {
do {
std::cout << "Enter a number: ";
std::getline(std::cin, newnumber);
std::cout << std::endl;
notint = ThisRound.CheckForInterger(newnumber);
} while (notint);
int newint = ThisRound.StringToInt(newnumber);
std::cout << "Your int is: " << newint << std::endl;
std::cout << "Enter Another y/n: ";
std::string choice;
std::getline(std::cin, choice);
std::cout << std::endl;
quit = (choice == "y") ? true : false;
} while (quit);
return 0;
}

最佳答案

给定 keymap::operator[] 返回与其关联的值。因此,对于 isNumber['0'] 它返回 0 而对于 isNumber['5'] 返回 5等。在 if 语句的上下文中,任何非零值都被视为 true,零被视为 false

如果 map::operator[] 找不到 key,它会创建一个具有值类型默认构造函数的新条目。在您的情况下,isNumber['a'] 将在您的 IsNumber map 中创建一个默认值为 0 的新条目。因此,isNumber['a'] isNumber['0'] 变得无法区分(无需进一步修改 IsNumber)

您可能想要做的是仅检查给定键是否在映射中,如果失败则不修改映射。为此,您想改用 map::find() 函数。它返回一个 map::iterator 给它找到的元素,如果失败则返回一个值 map::end()。因此你可以这样写:

if (IsNumber.find(character) != IsNumber.end() ) {
//do nothing and check next char
}

关于c++ - 当 char {'0' 用作查找时,std::map '0' ,0} 对会导致逻辑错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36930107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com