题目:字符串
1.The International Standard Book Number, or ISBN, is normally a sequence of 10 decimal digits, but in some cases, the capital letter X may also appear as the tenth digit. // 这一段话的意思:X有时会出现在第十个位置(也就是最后一个位置),但之前不能出现X,因为 decimal digits。
2.一串ISBN中,可以有任意个数的连字符。
3.输出时,原ISBN输入时的开头与结尾的空格不能有。
分析:
注意:仔细读题并理解
#include <iostream>
#include"cstring"
#include"cstdio"
#include"string"
using namespace std;
char *deal_with_char_arrary(char *input);
int main()
{
char input[80];int digit[80];char *change_input=NULL;
while(gets(input))
{
int k=0;int flag=1;//flag=1表示无非法输入
change_input=deal_with_char_arrary(input);
for(unsigned int i=0;i<strlen(input);i++)
{
if(input[i]>='0'&& input[i]<='9')
{
digit[k++]=input[i]-'0';
}
else if(k==9&&input[i]=='X') digit[k++]=10;
else if(input[i]==' '||input[i]=='-')
{
continue;
}
else
{
printf("%s is incorrect.\n",change_input);flag=0;break;
}
}
if(flag)
{
if(k!=10) printf("%s is incorrect.\n",change_input);
else
{
int s1=0;int s2=0;
for(int i=0;i<k;i++)
{
s1=s1+digit[i];
s2=s2+s1;
}
if(s2%11==0) printf("%s is correct.\n",change_input);
else printf("%s is incorrect.\n",change_input);
}
}
}
return 0;
}
char *deal_with_char_arrary(char *input)
{
int k=0;int t=0;
for(int i=0;i<strlen(input);++i)
{
if(input[i]==' ')
{
k++;
}
else break;
}
for(int i=strlen(input)-1;i>=0;--i)
{
if(input[i]==' ')
{
t++;
}
else break;
}
input[strlen(input)-t]='\0';
return input+k;
}
测试用例与输出:
0-89 2 37-010-6 (后有空)
0-89 2 37-010-6 is correct.
013152447X
013152447X is correct.
013152447x
013152447x is incorrect.
X131524470
X131524470 is incorrect.
0-1-3-1-5-2-4-4-7-X- -
0-1-3-1-5-2-4-4-7-X- - is correct.