我正在用C ++进行作业,我需要验证ID,但是我不明白为什么if不能读取或使用此值。
我有一个由用户传递的ID值(字符串),我需要检查它是否以'Y'或'y'开头并以'K'或'k'结尾,并且还有8个字符。
我已经尝试过dni [dni.size()],dni [sizeof(dni)],dni [aux]
//Función que valida un DNI que es pasado por parametro. Retorna un booleano
bool testeDNI(string dni){
bool check = false;
int aux = dni.size();
cout<< "Valor DNI: " <<aux<<endl;
if(dni[0] == 'Y' || dni[0] == 'y' && dni[dni.size()] == 'K' || dni[dni.size()] == 'k' ) {
std::cout << "***************************************"<< endl;
std::cout << "* DNI VALIDO *"<< endl;
std::cout << "***************************************"<< endl;
check = true;
}else{
std::cout << "***************************************"<< endl;
std::cout << "* DNI NO VALIDO *"<< endl;
std::cout << "***************************************"<< endl;
}
//Retorna el valor de check
return check;
}
我做这项工作的唯一方法是使用数字。 “在dni内部[7]”
最佳答案
if(dni[dni.size()] == 'Y' || dni[dni.size()] == 'y' && dni[dni.size()] == 'K' || dni[dni.size()] == 'k' )
dni.size()
是字符串“后面”的字符!如果要检查第一个字符,只需写dni[0]
,最后一个字符在dni[dni.size()-1]
。就像评论中提到的那样,您必须谈论有关operator precedenc的问题,它会导致您所期望的评估顺序不同。因此,添加一些括号,例如:
注意:仅需要前两行之一,请参阅注释
if(
( dni.size() ) && // check for empty string to prevent UB in following comparisons OR!!!
( dni.size() == 8 ) && // if you already have the need to check for a given length requirement
( dni[0] == 'Y' || dni[0] == 'y' ) &&
( dni[dni.size()-1] == 'K' || dni[dni.size()-1] == 'k' )
)
关于c++ - 整数值不被接受,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58409095/