【編程題目】輸入一個表示整數的字符串,把該字符串轉換成整數並輸出


第 20 題(字符串):
題目:輸入一個表示整數的字符串,把該字符串轉換成整數並輸出。
例如輸入字符串"345",則輸出整數 345。

 

/*
第 20 題(字符串):
題目:輸入一個表示整數的字符串,把該字符串轉換成整數並輸出。
例如輸入字符串"345",則輸出整數 345。
start time = 8:40
end time = 8: 47
correct time = 9:46
*/


//最開始什么正負號 什么輸入包含不是數字的字符 還有什么數字溢出通通都沒考慮 看了人家的答案才知道... 參考后修改成了現在的代碼

#include <stdio.h>
#include <string.h>

int myatoi(char * in)
{
    int ans = 0;
    for(int i = 0; in[i] != '\0'; i++)
    {
        if(in[i] - '0' >= 0 && in[i] - '0' <= 9)
        {
            ans = ans * 10 + in[i] - '0';
        }
        else if(!(i == 0 && (in[i] == '+' || in[i] == '-')))  //除了第一個字符可以是 + -號 其他位置其他符號不應出現
        {
            printf("error! input isn't a num!");
            return 0;
        }
    }
    if(in[0] == '-')  //判斷是否為負數
    {
        ans = 0 - ans;
    }

    //檢查是否越界
    char check[100];
    if(in[0] == '+')  //如果輸入的第一個符號是正號 加入到check中 正數自己不會有+號
    {
        check[0] = '+';
        sprintf(check + 1, "%d", ans);
    }
    else
    {
        sprintf(check, "%d", ans);
    }
    if(strcmp(check, in) != 0) //比較得到的數字轉換成的字符串 與 輸入字符串是否有差別 有差別就是溢出了
    {
        printf("overflow!");
        return 0;
    }

    return ans;
}


int main()
{
    char * cnum = "-124563567";
    int num = myatoi(cnum);
    return 0;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM