将整数解析为字符串C
如果要将整数转换为字符串,请尝试使用函数snprintf()
。
如果要将字符串转换为整数,请尝试使用函数sscanf()
或atoi()
或atol()
。
如果你想错误检查,strtol或strtoul会比sscanf,atoi或atol更好。 – 2009-01-26 11:31:41
`atoi`已被弃用,我不会推荐使用它。 – jacwah 2015-06-14 07:53:13
Java parseInt()
函数解析字符串以返回一个整数。等效的C函数是atoi()
。但是,这似乎不符合您的问题的第一部分。你想从一个整数转换为一个字符串,或从一个字符串转换为一个整数?
您还可以检查出atoi()
功能(ASCII到整数)和它的亲戚,atol
和atoll
等
另外,还有一些函数,做相反的为好,即itoa()
和合作。
为int转换为字符串:
int x = -5;
char buffer[50];
sprintf(buffer, "%d", x);
你也可以做到这一点对双打:
double d = 3.1415;
sprintf(buffer, "%f", d);
将字符串转换为int:
int x = atoi("-43");
见http://www.acm.uiuc.edu/webmonkeys/book/c_guide/以了解这些功能的文档。
你的代码有可能发生缓冲区溢出,但我不想计算你需要有多少位的整数才能实现。使用snprintf()。 – aib 2009-01-26 00:59:47
要在那里有一个缓冲区溢出,空间为50个字符,您将需要有163位整数,假设为肯定的情况并存在空终止。 >>> math.log(10 ** 49)/math.log(2) 162.77447664948076 – Arafangion 2010-06-20 04:09:34
这听起来像你有一个字符串,并希望将其转换为整数,由parseInt
提来看,虽然它不是从这个问题很清楚 ...
要做到这一点,使用strtol
。这个函数比atoi
稍微复杂一点,但作为回报,它提供了一个更清楚的错误条件指示,因为它可以填充一个指针(调用者提供)与第一个让它感到困惑的字符的地址。然后调用者可以检查违规字符并判定该字符串是否有效。 atoi
,相反,如果它丢失了,返回0,这并不总是有帮助 - 但如果你对这种行为感到满意,那么你也可以使用它。
strtol
的示例使用如下。对错误的检查非常简单:如果第一个无法识别的字符不是结尾字符串的'\x0'
,则该字符串被认为不包含有效的int。
int ParseInt(const char *s,int *i)
{
char *ep;
long l;
l=strtol(s,&ep,0);
if(*ep!=0)
return 0;
*i=(int)l;
return 1;
}
该函数用整数填充* i,如果字符串包含有效整数,则返回1。否则返回0.
有趣的是,这名男子页的atoi说,这是等同于: (INT)strol(STR(字符* *)NULL,10) – 2013-04-07 19:22:15
你可以试试:
int intval;
String stringval;
//assign a value to intval here.
stringval = String(intval);
应该做的伎俩。
这不是最佳解决方案。这是我的解决方案,因为有多种限制,所以如果您根据课程/教师的指导准则有限的资源,这可能非常适合您。
另外请注意,这是我自己的项目的实施一小部分,我不得不读操作数,以及数字,所以我用则GetChars。否则,如果你只需要整数,没有其他类型的角色,我喜欢用这样的:
int k;
while (scanf("%d", &k) == 1)
规则没有具体的,“先进的” C概念:没有字符串变量,没有结构,没有指针,没有方法不是盖的,也是唯一包含我们被允许进行的#include
所以没有简单的方法调用类似的atoi()或提供任何字符串变量的使用,我选择了只是蛮力它。
1:在使用的getchar读字符(与fgets被禁止)。返回1(退出状态1)如果 存在无效字符。对于基于Java中的parseInt的问题 1 11 13是有效的,但1 11 1a是无效的,因此对于所有值,我们都有一个有效的“字符串”,如果所有字符都是0-9,忽略空格。
2:炭的ASCII值转换为其整数值(例如,48 => 0。)
3:使用变量val来存储一个int,使得对于每个字符在一个“串”有是一个相应的整数数字。即“1234”=> 1234将它附加到一个int数组并将val设置为0以供重用。
下面的代码演示了这种算法:
int main() {
int i, c;
int size = 0;
int arr[10]; //max number of ints yours may differ
int val = 0;
int chars[1200]; //arbitrary size to fit largest "String"
int len = 0;
//Part 1: read in valid integer chars from stdin
while((c = getchar()) != EOF && (c < 58 && c > 47)) {
chars[len] = c;
len++;
}
//Part 2: Convert atoi manually. concat digits of multi digit integers and
// append to an int[]
for(i = 0; i < len; i++){
for(i = 0; i < len; i++){
if(chars[i] > 47 && chars[i] < 58){
while((chars[i] > 47 && chars[i] < 58)){
if(chars[i] == 48)
c = 0;
if(chars[i] == 49)
c = 1;
if(chars[i] == 50)
c = 2;
if(chars[i] == 51)
c = 3;
if(chars[i] == 52)
c = 4;
if(chars[i] == 53)
c = 5;
if(chars[i] == 54)
c = 6;
if(chars[i] == 55)
c = 7;
if(chars[i] ==56)
c = 8;
if(chars[i] == 57)
c = 9;
val = val*10 + c;
i++;
}
arr[size] = val;
size++;
if(size > 10) //we have a check to ensure size stays in bounds
return 1;
val = 0;
}
//Print: We'll make it a clean, organized "toString" representation
printf("[");
for(i = 0; i < size-1; i++){
printf("%d, ", arr[i]);
}
printf("%d]", arr[i];
return 0;
再次,这是蛮力方法,但是像我这样的,你不能用专业的人使用的方法的概念或多种C99工具的情况下,这可能是你在找什么。
我想你得到了另一种方式:int Integer.parseInt(String)? – 2009-01-25 23:42:57