在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,648
到 2,147,483,647
是常用范围。以上是关于在c中将字符串转换为int [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C++ 中将数字字符串转换为 int 数组 [重复]