человека просят ввести номер своей кредитной карты, он должен иметь 16 цифр, после каждых 4 цифр он имеет пробел или -.Как проверить эту строку на C++?
У меня есть код, чтобы проверить, есть ли пробелы или дефис, а также проверка того, вводит ли это письмо вместо этого.
Проблема с этим кодом является то, что: Это говорит вне диапазона, когда я вхожу письмо, и он также говорит, что запись является правильной, когда я вошел меньше, чем то, что я установить длину быть. Любые идеи, в которых я ошибаюсь?
#include<iomanip>
#include <iostream>
#include<conio.h>
using namespace std;
int main() {
string creditcardnum;
bool validcreditcardnum;
do{
validcreditcardnum=true;
cout << "Enter your credit card number\t Enter 4 numbers followed by a space or -\n\t\t";
cin >> creditcardnum;
if(validcreditcardnum==false){
cout<<"Your credit card number is invalid\n\t\t";
}
if (creditcardnum.length()!=19){
validcreditcardnum==false;
}
for(unsigned short a= 0,b=5, c=10, d=15;
a<=3,b<=8,c<=13,d<=18;
a++, b++, c++, d++){
if(!isdigit(creditcardnum.at(a))&&
!isdigit(creditcardnum.at(b))&&
!isdigit(creditcardnum.at(c))&&
!isdigit(creditcardnum.at(d))
)
validcreditcardnum==false;
}
if(
creditcardnum.at (4) !=' '||'-'&&
creditcardnum.at (9) !=' '||'-'&&
creditcardnum.at (14)!=' '||'-'){
validcreditcardnum==false;
}
while(validcreditcardnum==false);
if(validcreditcardnum=true)
cout << "Credit card number is correct";
return 0;
}
Yous также должно смотреть вверх Луны проверить для проверки номеров кредитных карт: https: //en.wikipedia .org/wiki/Luhn_algorithm – ldrumm
Я бы сказал, что лучший способ сделать такую проверку - использовать ['std :: regex'] (http://en.cppreference.com/w/cpp/regex), [' boost :: regex'] (http://www.boost.org/doc/libs/1_55_0/libs/regex/doc/html/index.html), если вы не можете использовать [tag: C++ 11 ]. –
Это 'if' выглядит странно:' if (creditcardnum.at (4)! = '' || '-' && creditcardnum.at (9)! = '' || '-' && creditcardnum.at (14)! = '' || '-') ' – Jigsore