1. 程式人生 > >九度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
****************************************************************/