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++
如果输入不是从 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
- 这意味着大写或小写。如果你真的需要其中一个,你可以使用 islower
或 isupper
.
由于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 语句只能用于匹配您指定的特定大小写,而不能像其他一些语言那样用于匹配大小写范围。
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 请解释"函数1(p1,p2,p3);"的输出
- C++:将控制台输出存储在宏中更好吗
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 为什么我的代码在输出中增加了93天
- 如何从void函数输出字符串
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- AES加密到解密未正确输出
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- C++格式化输出问题
- 将值从二维数组输出到文本文件
- 集合上的输出迭代器:assign和increment迭代器
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- 为什么rk4.do_step不输出C++中的初始条件
- 输出没有重复元素的动态数组(收缩数组)C++
- 如何根据单词在文本中出现的概率输出单词