UVA 333 Recognizing Good ISBNs

题目:字符串
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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值