在c中将字符串转换为int

时间:2015-07-08 07:19:00

标签: c++ c

我有一个字符串,其中包含12个字符,并希望在int中转换它,或者我们可以说数字,但不能这样做。我写了一个代码,将字符串转换为11位数,但之后它开始给出垃圾值。 我的代码就像

function FirstFactorial(num) {
    if(num==1)
        return num;
    else {
        a = FirstFactorial(num-1);
        a = a * num;
        return a;
    }
}

3 个答案:

答案 0 :(得分:3)

错误:

  • 什么是x?宣布在哪里?为什么要注释掉将res复制到x中的代码?为什么要在循环内而不是在函数末尾复制它?如果你坚持使用double,你甚至不需要x return (double)res;,原因不明。
  • 12345678912是123亿。通常long只能容纳2 ^ 32/2 = 21.4亿作为最大数字。考虑使用long long
  • 您正在使用%d转换说明符进行长双打印,这在两种情况下都是错误的。
  • 你可能不想在这个程序中使用double,但它没有任何意义。

其他事项:

  • 由于这是托管系统,因此必须将main声明为int main (void)Reference
  • 始终将指向字符串文字的指针声明为const char*。因为你永远不会写字符串文字,只能从中读取。
  • 对于const正确性,函数的参数也应声明为const char*

答案 1 :(得分:1)

问题是long不能保持与“12345678912”一样大的数字而是使用 unsigned long long

其说明符为"%llu"

并且在您的代码中x并未延迟,而是使用return res;

当您使用unsigned long long时,您需要将函数double myatoi()的定义更改为unsigned long long myatoi() -

您的程序可以重写如下 -

#include<stdio.h>
unsigned long long myAtoi(char *str);
int main()
{

   unsigned long long  n; // Note here n also changed from double to unsigned long long
   double m;
   char* a="12345678912";
   char* b="34";
   n=myAtoi(a);
   //m=atoi(b);
   printf("\nconversion is : %llu",(n));
}

   unsigned long long myAtoi(char *str)
{   

   printf("\nstr : %s",str);
   unsigned long long res = 0; // Initialize result
   long i ;
   // Iterate through all characters of input string and update result
   for (i = 0; str[i] != '\0'; i++) 
  {
       res = res*10 + str[i] - '0';
       printf("\n res : %llu",res);
       //x=res; 
  }
     return res;
}

答案 2 :(得分:0)

我认为问题是你无法持有&#34; 12345678912&#34;一个长变量。 请参考 http://www.tutorialspoint.com/cprogramming/c_data_types.htm

长变量可以容纳的最大值是-2,147,483,648到2,147,483,647

并且你从method.return res返回了错误的值,而不是x.no需要x代码。