在c中将字符串转换为int [重复]

Posted

技术标签:

【中文标题】在c中将字符串转换为int [重复]【英文标题】:convert a string in to int in c [duplicate] 【发布时间】:2015-07-08 07:18:59 【问题描述】:

我有一个包含 12 个字符的字符串,并且想将其转换为 int 或者我们可以说 digit ,但无法做到。我编写了一个将字符串转换为 11 位数字的代码,但之后它开始提供垃圾值。 我的代码是这样的

#include<stdio.h>
double myAtoi(char *str);
void main()

    double n;
    double m;
    char* a="12345678912";
    char* b="34";
    n=myAtoi(a);
    //m=atoi(b);
    printf("\nconversion is : %d",(n));


double myAtoi(char *str)
   
    printf("\nstr : %s",str);
    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 : %d",res);
        //x=res;
    
    return res;

【问题讨论】:

C++ 的答案将完全不同。你确定你想要那些吗?如果不是,那么 c++ 与这个问题有什么关系? 请缩进您的代码。 我怀疑您的意思是return res;,因为该代码中没有任何名为“x”的东西。而且你的printf 格式字符串是错误的,所以即使你修复它,你也可能会打印垃圾。 @Aniket Amrutkar 你的问题解决了吗? 是的.. @ameyCU 给了我正确的答案.. 【参考方案1】:

错误:

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

其他:

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

【讨论】:

【参考方案2】:

问题是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;

【讨论】:

非常感谢。它工作正常... @AniketAmrutkar 一般规则如果它有助于接受答案,不用担心你的程序:)。【参考方案3】:

我认为问题在于您不能将“12345678912”保留为长变量。 请参考 http://www.tutorialspoint.com/cprogramming/c_data_types.htm

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

并且你从你的方法返回错误的值。返回 res 而不是 x。在该代码中不需要 x。

【讨论】:

C 指定最小值long 的范围是 -2,147,483,647 到 2,147,483,647。 C 没有指定其最大范围。 -2,147,483,6482,147,483,647 是常用范围。

以上是关于在c中将字符串转换为int [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中将数字字符串转换为 int 数组 [重复]

如何在 MVC .ASP NET 中将变量从字符串转换为 int [重复]

在LINQ中将字符串转换为Int…到实体框架[重复]

如何在python中将单引号字符串转换为数字[重复]

为啥我不能在c中将字符串转换为int

在Python DataFrame中将字符串转换为float64 [重复]