检查字符串中每个字符的类型
Checking what type each character in a string is
我有一个函数,我用它来检查字符串是否在正确的格式。我试着通过观察每个字符并确定它是否属于正确的类型来做到这一点。然而,无论我尝试什么,我得到一个错误,我不能弄清楚。代码如下:
bool valid(string checkcode)
{
if(checkcode.length()!=6) return false;
else if(isalpha(checkcode.at(0)))&(isalpha(checkcode.at(1)))&(isdigit(checkcode.at(2)))&(isdigit(checkcode.at(3)))&(isalpha(checkcode.at(4)))&(isalpha(checkcode.at(5))) return true;
else return false;
}
我得到的错误是在第一个'&',它说"错误:表达式必须是一个Ivalue或函数指示符"我真的被困在这里,任何帮助是感激的。
isalpha(checkcode.at(0)))&(isalpha(checkcode.at(1)))
//bit and
应该isalpha(checkcode.at(0)))&&(isalpha(checkcode.at(1)))
//^^logical and
在这种情况下您需要使用logical and
。
你还需要确保你的括号匹配。
//better to format multiple conditions and make sure () match
if(
(isalpha(checkcode.at(0)))
&&(isalpha(checkcode.at(1)))
&&(isdigit(checkcode.at(2)))
&&(isdigit(checkcode.at(3)))
&&(isalpha(checkcode.at(4)))
&&(isalpha(checkcode.at(5)))
)
return true;
bool valid(string checkcode)
{
return checkcode.length() == 6
&& (isalpha(checkcode.at(0)))
&& (isalpha(checkcode.at(1)))
&& (isdigit(checkcode.at(2)))
&& (isdigit(checkcode.at(3)))
&& (isalpha(checkcode.at(4)))
&& (isalpha(checkcode.at(5)));
}
错误的原因是括号放错了地方。编译器报错的&
在if
语句的条件表达式之外的
编译器将此视为要测试的条件:
if(isalpha(checkcode.at(0)))
其余部分被认为是在条件为真时执行的语句:
&(isalpha(checkcode.at(1)))...
因此,编译器是正确的。当它看到一元 &
操作符时,它期望操作数是可以取其地址的东西,例如左值或函数。
仔细阅读错误信息和代码将帮助您下次发现此类错误。(也就是说,当编译器抱怨缺少"左值或函数指示符"时,问问自己是什么让它首先期望这样的事情。当它取某个东西的地址时,它需要这些,所以考虑为什么它认为应该取任何东西的地址。它使用一元&
操作符来实现这一点,但是您打算使用二进制操作符,因此请仔细查看代码,以确定为什么没有将其解释为二进制操作符。您知道c++语法,因此您知道if
语句需要全部用圆括号括起来,因此您知道只有第一个表达式是条件的一部分。这不是您想要的,因此您会意识到右括号放错了位置。)
实际上,单&符号&
操作符不应该用于布尔表达式。您应该使用&&
。这种差异不会导致您所看到的错误,而且也不会对代码的运行时行为产生明显的影响。
相关文章:
- 字符类型转换不兼容
- 将超出范围的整数分配给有符号字符类型
- 当我输入字符类型的数字时,为什么我无法获得整数?
- 如何从文本文件中读取数值,直到遇到字符类型?
- 结构 init:字符**类型的标量初始值设定项两边的大括号
- 有没有办法将字符类型转换为整数?
- if(双精度类型 == 字符类型)
- 将 static_cast<int>(-15) 分配给静态常量字符类型变量
- 如何将字符类型变量附加到字符串中?
- 成本字符*类型的非常量引用的无效初始化,并且来自常量字符*类型的临时引用
- 基于字符类型的string_view模板
- C++ MDC final-在字符类型的数组结构中按字母顺序对记录中的名称进行排序
- 字符类型声明和验证
- 如何编写模板函数来添加整数但连接字符串和字符类型?
- 我的编辑距离递归代码中的字符类型有问题
- 为什么 QVariant 将字符类型视为整数类型
- 将文件内容复制到容器而不是字符类型
- C++ 如何从用户输入中读取第一个字符并忽略 rest(字符类型)
- 字符和常量字符[2] 类型的操作数无效到二进制运算符
- 对于不确定值的无符号字符类型,标准中特殊语言对于左值到右值的转换有什么意义?