我必须使用字符数组验证我的数据“123-AB-12345”是否正确。我将字符数组大小设置为 13,包括 '\0'。如果不满足条件,该函数必须返回 false。我所做的就是程序验证这 12 个字符,但当我传递更多值(例如“123-AB-123456789”)时,它不会返回 FALSE,并且它会返回 true。我的程序如下:
#include<iostream>
using namespace std;
bool isValidBookId(char bookId[13]);
int main()
{
char book[13];
cin.getline(book,13);
bool id = isValidBookId(book);
cout<<id;
}
bool isValidBookId( char bookId[13] ) {
/* Valid: 098-EN-98712 */
if ( bookId[12] != '\0' )
return false;
if ( bookId[3] != '-' )
return false;
if ( bookId[6] != '-' )
return false;
for ( int i = 0; i < 3; i++ ) {
if ( bookId[i] < '0' || bookId[i] > '9' ) {
return false;
}
}
for ( int i = 4; i < 6; i++ ) {
if ( bookId[i] < 'A' || bookId[i] > 'Z' ) {
return false;
}
}
for ( int i = 7; i < 12 || bookId[12]!='\0'; i++ ) {
if(bookId[13]!='\0'){
return false;
}
if ( bookId[i] < '0' || bookId[i] > '9' ) {
return false;
}
}
return true;
}
我不知道为什么这个条件不起作用。
if ( bookId[12] != '\0' )
return false;
最佳答案
查看您的代码,唯一的解释是数组的最后一个字符为空。尝试指定如下分隔符:
cin.getline(book, 13, '\n');
我会引用这个link :
“如果 n 大于零,即使提取了空字符串,空字符 ('\0') 也会自动附加到写入的序列中。”
关于c++ - C++ 中的字符数组验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59604661/