[英]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.