簡體   English   中英

程序將字符串轉換為整數

[英]Program to convert a string to integer

我寫的代碼如下:

#include<stdio.h>
#include<math.h>
#include<string.h>
int strToint(char []);
int main()
{
    char str[20];
    printf("Enter the string-");
    gets(str);
    printf("\nthe integer is %d ",strToint(str));
    return 0;
}
int strToint(char str[])
{
    int i,a,sum=0,k,j;
    a=strlen(str);
    for(i=0;i<a;i++)
    {
        k=str[i]-'0';
        j=pow(10,a-i-1);
        sum+=k*j;
    }
    return sum;
}

如果輸入輸入,例如567,則得到562,但我不明白為什么。 我覺得這可能與pow功能有關。

感謝幫助。 謝謝!

pow()是浮點函數,其行為因系統而異。 該標准對其准確性沒有任何要求。 似乎您的返回的值不符合您的要求。

您不需要實現將文本轉換為整數的函數,因為標准庫包含執行此操作的函數。 一個明顯的選擇是sscanf

但是,如果必須實現這樣的功能,則應使用整數算法。 任何此類代碼都應處理負值,並檢查無效輸入。 例如。 "a"傳遞給函數時會發生什么?

我測試了您的代碼並獲得了預期的結果。 也許問題與功能pow有關。

您可以編寫更簡單的函數,而無需使用處理實數的函數。

例如

int strToint( const char str[] )
{
    int sum = 0;

    for ( ; *str; ++str )
    {
        sum = 10 * sum + *str - '0';
    }

    return sum;
}

考慮到功能gets是不安全的。 最好使用函數fgets 例如

fgets( str, 20, stdin );

size_t n = strlen( str );
if ( str[n - 1] == '\n' ) str[n - 1] = '\0';

在第一次調用pow(10,2) ,庫的弱pow()返回99.999 ...,在分配給j將其截斷為99。

由於第一個數字為5,所以最終的總和要少5。 (100 * 5 vs 99 * 5)

如果代碼必須使用FP函數,則最好在整數賦值前四舍五入

j = round(pow(10,...));

正如@Vlad指出的那樣,可以避免所有FP數學。

-

C並不要求浮點函數是准確的。 一個好的 pow()函數應該在這里提供了確切的答案,這就是為什么它可以在許多其他機器上運行的原因。

對於完整的atoi,有很多帖子,例如FromStringToInteger

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM