-4

これは私の関数であり、助けが必要です....short intエラーハンドラまたはtry&catchなしで範囲をキャッチしようとする必要があります。このアルゴリズムで失敗を見つけることができません — 助けていただければ幸いです。

short int checkShortInt(char * myString)
{
    short int i = 0;
    short int len;

    if((myString[i]=='+')||(myString[i]=='-')) i++;

    for (len = i; myString[len] != '\0'; len++);

    if(len-i>5) return(0);
    if(myString[i+0]<'3') return(1);
    if(myString[i+0]>'3') return(0);
    if(myString[i+1]<'2') return(1);
    if(myString[i+1]>'2') return(0);
    if(myString[i+2]<'7') return(1);
    if(myString[i+2]>'7') return(0);
    if(myString[i+3]<'6') return(1);
    if(myString[i+3]>'6') return(0);
    if(myString[i+4]>'7') return(0);
    return(1);
}
4

3 に答える 3

1
  1. 2 の補数が使用される場合、 がカバーする範囲は非対称であることに注意してくださいshort。通常は -32768 から 32767 の範囲です。
  2. 値の長さが 5 より小さい場合、文字列は明らかにショートに収まります。
于 2013-10-31T23:09:16.590 に答える
0
short int checkShortInt(char * myString)
{
    short int i = 0;
    int total = 0;

    // Skip a leading +/- sign.
    if((myString[i]=='+')||(myString[i]=='-')) i++;

    while(myString[i] != '\0')
    {
        total = 10*total + myString[i]-'0';
        ++i;
    }

    if (SHRT_MIN <= total && total <= SHRT_MAX)
    {
        return total;
    }
    return 0;
}

サンプル入力と結果:

checkShortInt("53") ==> 53
checkShortInt("+125") ==> 125
checkShortInt("0") ==> 0
checkShortInt("70345") ==> 0
于 2013-10-31T23:06:57.703 に答える