一個人被要求輸入他們的信用卡號碼,它必須有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;
}
你要跟也應該看看了盧恩檢查驗證信用卡號碼: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