九度OJ-题目1508:把字符串转换成整数

题目链接地址:

九度OJ-题目1508:把字符串转换成整数


题目描述:
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。

输入:
输入可能包含多个测试样例。
对于每个测试案例,输入为一个合法或者非法的字符串,代表一个整数n(1<= n<=10000000)。

输出:
对应每个测试案例,
若输入为一个合法的字符串(即代表一个整数),则输出这个整数。
若输入为一个非法的字符串,则输出“My God”。

样例输入:
5
-5
+8

样例输出:
5
-5
8


解题思路:

只有5 ,-5,+8,-0005,+00090这些类型的字符串是合法的整数,其余的都是非法的整数。
因此合法的整数必须同时满足以下两个条件:
(1)字符串的第一个字符只能是0 ~ 9之间的数字或者正负号;
(2)字符串中第一个字符之后的字符只能是0 ~ 9之间的数字。

AC代码如下:

#include<stdio.h>
#include<string.h>
 
/**
* 将字符串转化为整数
* @param numberString  输入的字符串
* @param lenOfNumberString  输入字符串的长度
* @return void
*/
void stringToInt(char numberString[],int lenOfNumberString)
{
  int i,start;
  int sign;            // 表示符号位:正数为1,负数为-1
  int countOfNumber;   // 用于统计输入字符串中的数字个数
  int number;          // 转化字符串得到的整型数
  if(numberString[0] < '0' && numberString[0] > '9' && numberString[i] != '+' && numberString[i] != '-')
  {
     printf("My God\n");
  }
  else
  {
    start = 0;
    sign = 1;
    countOfNumber = 0;
    number = 0;
    // 如果前面有符号位,则对符号位进行处理
    if('-' == numberString[0] || '+' == numberString[0])
    {
         if('-' == numberString[0])
            sign = -1;
         start++;
    }
    // 将字符串中的数字转化为整数
    for(i = start;i < lenOfNumberString;i++)
    {
       if(numberString[i] >= '0' && numberString[i] <= '9')
       {
           number = 10 * number + (numberString[i] - '0');
           countOfNumber++;
       }
       else
       {
           break;
       }
    }
 
    if(i >= lenOfNumberString - 1 && countOfNumber > 0) // 表示输入的字符串是一个合法的整数
    {
       number = sign * number;
       printf("%d\n",number);
    }
    else                                                // 表示输入的字符串不是合法的整数
    {
       printf("My God\n");
    }
  }
}
 
int main()
{
    char numberString[1000];
    int lenOfNumberString;
    while(gets(numberString))
    {
        lenOfNumberString = strlen(numberString);
        stringToInt(numberString,lenOfNumberString);
    }
    return 0;
}
 
/**************************************************************
    Problem: 1508
    User: blueshell
    Language: C
    Result: Accepted
    Time:0 ms
    Memory:912 kb
****************************************************************/


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值