-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. 请注意,short当使用二进制补码时,所涵盖的范围是不对称的:通常范围从 -32768 到 32767。
  2. 如果值的长度小于 5,则字符串显然适合短。
于 2013-10-31T23:09:16.590 回答
1

我的两分钱。也许矫枉过正...

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <inttypes.h>

int checkShortInt(char *myString)
{
    long long i = strtoll(myString, 0, 0);
    return (i >= SHRT_MIN && i <= SHRT_MAX);
}
于 2013-10-31T23:22:04.317 回答
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 回答