c++ - 将字符串转换为字符并检查字母
问题描述
我的一段代码有一些问题,我认为当我尝试使用输入的输入对其进行测试时会导致错误,这会导致 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++ 很陌生,所以我不知道我做错了什么,所以非常欢迎提出建议。
解决方案
只需检查是否找不到无效数字:
bool romanDigitsOnly(const std::string& number) {
return number.find_first_not_of("IVXLCDM") == std::string::npos;
}
如果在字符串中没有找到指定的字符,find_first_not_of返回 npos。请注意,这仅检查有效数字,而不检查有效罗马数字。
推荐阅读
- pandas - 如何合并或处理数据框中的重复列?
- coldfusion - 使用显式接收器调用 ColdFusion 方法
- spring - 获取 Spring Data REST API 的子资源返回 404 Not Found
- amazon-cloudformation - 在启动时引导 EC2 实例以安装 awslogs
- javascript - 通过比较两个数组基于索引映射键
- python - SMTPServerDisconnected:连接意外关闭
- google-cloud-platform - 使用 GKE 集群在 Stackdriver 中启用毫秒级日志记录
- sql-server - 使用 VBA 从 Excel 到 SQL Server 表的 INSERT INTO 语句
- oracle - 如何将预构建的 Perl DBD::Oracle 移植到 Oracle 库的不同位置?
- scheme - 记忆化表现 - SICP 练习 3.27 似乎是错误的