switch语句:如果输入不是数字(1到9)或字母(a到z)输出<<“错误”?C++

Switch statement : if input not a digit (1 to 9) or a letter (a to z) output << "error" ? C++

本文关键字:C++ 输出 错误 输入 如果 语句 switch 数字      更新时间:2023-10-16

如果输入不是从 a 到 z 的字母或从 1 到 9 的数字,我如何输出"错误"消息。例如,如果用户输入"%",我如何输出"错误"?

我试过这个:

if ((name.letter <= a) && (name.letter >= z)) {
   cout << "error";
} 

但我想这不是C++代码...

标准库cctype中有有用的函数。

例:

#include <cctype>
if (!islower((unsigned char)name.letter) && (!isdigit((unsigned char)name.letter) || name.letter == '0')) {
    cout << "error";
}

如果name的类型是 std::string ,则可能是这样的:

#include <iostream>
#include <string>
#include <cctype>
using std::cout;
int main(void) {
    std::string name = "1%";
    // use loop to check every characters
    bool valid = true;
    for (size_t i = 0, len = name.length(); i < len; i++) {
        unsigned char c = (unsigned char)name[i];
        if (!islower(c) && (!isdigit(c) || name[i] == '0')) {
            // illegal character is found
            valid = false;
            break;
        }
    }
    if (!valid) {
        cout << "error";
    }
    return 0;
}

您可以使用标准库中已经存在的一些内容(<cctype>)轻松检查您的条件。即:

isdigit - 检查字符是否为十进制数字字符。

isalpha - 检查字符是否为字母。

它们都需要int参数,但您可以执行以下操作:

char c;
cin >> c;
if(!(isdigit(c) && c != '0') && !isalpha(c)) {
  std::cerr << "Error!n";
}

请注意,如果c是字母,isalpha将返回true - 这意味着大写或小写。如果你真的需要其中一个,你可以使用 islowerisupper .

由于name是一个std::string,你可以执行以下操作:

for(auto c: name) {
  if(!(isdigit(c) && c != '0') && !isalpha(c)) {
    std::cerr << "Error: " << c << " is not a valid charactern";
    break; // or return or exit
  }
}

如何输出"错误"消息

您已将此帖子标记为C++。

处理此问题的一种C++方法是:

void checkName(std::string name)
{
   const std::string letters = "abcdefghijklmnopqrstuvwxyz";
   const std::string digits  = "123456789";
   const std::string letterDigits (letters + digits);
   std::cout << "nname '" << name << "'" << std::endl;
   size_t indx = name.find_first_not_of(letterDigits);
   if(indx != std::string::npos)
   {
      std::cerr << "error at indx " << indx << " == '" << name[indx] << "'n" << std::endl;
   }
   else
   {
      std::cout << "all chars of name '" << name << "' are letters or digitsn" << std::endl;
   }
}
int main(int /*argc*/, char** /*argv*/ )   
{
   {
      std::string name = "dan%iel";
      checkName(name);
   }
   {
      std::string name = "daniel";
      checkName(name);
   }
   return (0);
}

不使用开关语句!只需将字母括在单引号中,即可将它们视为其 ASCII 值:

if ((name.letter <= 'a') && (name.letter >= 'z')) {
 cout << "error";
}

switch 语句只能用于匹配您指定的特定大小写,而不能像其他一些语言那样用于匹配大小写范围。