函数检查短int算法

时间:2013-10-31 22:48:40

标签: c

这是我的功能,我需要帮助...... 我必须尝试捕获short int的范围,没有错误处理程序或尝试& 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);
}

3 个答案:

答案 0 :(得分:1)

  1. 请注意,当使用两个补码时,short涵盖的范围是不对称的:通常范围为-32768到32767.
  2. 如果值的长度小于5,则字符串显然适合短。

答案 1 :(得分: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);
}

答案 2 :(得分: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