首页 > 解决方案 > 将字符串转换为字符并检查字母

问题描述

我的一段代码有一些问题,我认为当我尝试使用输入的输入对其进行测试时会导致错误,这会导致 Visual Studios 冻结并显示一条错误消息,指出在 0x74A1DDC2 出现未处理的异常。这是我写的代码:

 bool isValidRomanNumber(string test) {
//Validates that a roman number was entered

char char_array[10];
strcpy(char_array, test.c_str());

for (int i = 0; i < 10; i++) {
    if ('I' == char_array[i] || 'V' == char_array[i] || 'X' == char_array[i]|| 'L' == char_array[i] || 'C'== char_array[i] || 'D' == char_array[i] || 'M' == char_array[i]) {
        cout << test << endl;
        return true;
    }
    else {
        return false;
    }
}
}

我知道是这个函数导致了错误,因为我测试过的程序的所有其他部分都可以正常工作。我对 C++ 很陌生,所以我不知道我做错了什么,所以非常欢迎提出建议。

标签: c++unhandled-exception

解决方案


只需检查是否找不到无效数字:

bool romanDigitsOnly(const std::string& number) {
  return number.find_first_not_of("IVXLCDM") == std::string::npos;
}

如果在字符串中没有找到指定的字符,find_first_not_of返回 npos。请注意,这仅检查有效数字,而不检查有效罗马数字


推荐阅读