本来5分钟就写完的程序,后来在输入设计的测试用例时发现了严重的BUG,即年月日没有判断。
好吧,这又花了我十几分钟构思逻辑结构,考虑了所有的情况之后,将逻辑结构简化到最精简,程序如下:
#include <iostream>
#include <cstring>
using std::cin;
using std::cout;
using std::endl;
#define N 100
#define ID_LEN 18
int main(int argc, char *argv[])
{
char str[N];
int str_len,i=0;
cout<<"Input your ID numer, 18-word string: " <<endl;
cin>>str;
str_len = strlen(str);
if(str_len != ID_LEN)
{
cout<<"Input string number is not 18!"<<endl;
exit(1);
}
while(i<ID_LEN)
{
// 合法字符识别
if( (i <= ID_LEN-1 && (str[i] >='0' && str[i] <='9')) || (i == ID_LEN-1 && str[i] =='X') )
{
// ID合法并输出日期
if( i==ID_LEN-1 )
{
cout<<"Your Birthday Info is: "<<std::endl;
for(int j=6;j<=13;j++)
{
cout<<str[j];
}
cout<<endl;
}
// 月判别
if( (i==10 && str[i]>'1') || (i==11 && str[i-1]=='0' && str[i]=='0') || (i==11 && str[i-1]=='1' && str[i]>'2') )
{
cout<<"Wrong Month Info!"<<endl;
exit(1);
}
// 日判别
if( (i==12 && str[i]>'3') || (i==13 && str[i-1]=='0' && str[i]=='0') || (i==13 && str[i-1]=='3' && str[i]>'1') )
{
cout<<"Wrong Data Info!"<<endl;
exit(1);
}
++i;
}
else
{
cout<<"Exist Unavailable Words!"<<endl;
exit(1);
}
}
return 0;
}