c++ - 如何安排循环来检查数字

标签 c++ cstring ctype

我有一个读取信用卡号的程序。我想添加一些东西来确保添加了 16 个数字、没有字母和任意多的空格(尽管它们不计入数字)。是否有一个函数或一组函数可以执行此操作,或者我是否应该制作一堆使用 isdigit() 和 isalpha() 的 while 和 if 循环,一次通过数组一个元素?

char cardNum[32];
cout << "Enter credit card number: ";
cin.getline(cardNum, 32); //Read in the entire line for the name

最佳答案

您可以做很多事情。一种想法是将 std::find_if 与自定义谓词一起使用。例如:

bool IsCharIllegal(char ch)
{
  // return true or false based on whatever your exact requirements are
}

然后:

auto itFound = std::find_if(cardNum, cardNum + 32, IsCharIllegal);
if(itFound != cardNum + 32)
   // invalid character was entered!

也有使用 std::string 而不是原始 char 数组的情况:

std::string cardNum;
cout << "Enter credit card number: ";
std::cin >> cardNum;

其次是:

auto itFound = std::find_if(cardNum.begin(), cardNum.end(), IsCharIllegal);
if(itFound != cardNum.end())
   // invalid character was entered!

这有助于避免神奇的 32 并且还允许输入任何长度。

关于c++ - 如何安排循环来检查数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23302854/

相关文章:

c - 如何检查字符串是否是c中的字母(a-z或A-Z)

c++ - cout 是否保证有 ctype<char> 刻面?

mingw 中 UTF-8 的 C++ ctype 面

c++ - 在 std::vector 和 std::unordered_map 之间进行选择以在少数项目中进行搜索?

c++ - 从 C-Style 字符串 C++ 中删除字符

c++ - 帮助实现结构数组中名称的二进制搜索

c++ - C++ 中奇怪的内存管理问题(至少来自初学者)

c++ - 模板类中没有匹配的函数调用

c++ - 如何在 Windows 10 Visual Studio 中使用所需的 `.dll` 进行构建

c++ - 从函数类型中剥离所有限定符