将整数解析为字符串C.

如何在C中解析整数到string(char* || char[]) ? 是否有与C中的Java的Integer.parseInt(String)方法等效的方法?

如果要将整数转换为字符串,请尝试使用函数snprintf()

如果要将字符串转换为整数,请尝试使用函数sscanf()atoi()atol()

要将int转换为字符串:

 int x = -5; char buffer[50]; sprintf( buffer, "%d", x ); 

你也可以做双打:

 double d = 3.1415; sprintf( buffer, "%f", d ); 

要将字符串转换为int:

 int x = atoi("-43"); 

有关这些function的文档,请参见http://www.acm.uiuc.edu/webmonkeys/book/c_guide/ 。

听起来你有一个字符串,并希望将它转换为一个整数,从提到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。

这在Steve Summit的C FAQ中有所讨论 。

Java parseInt()函数解析字符串以返回整数。 等效的C函数是atoi() 。 但是,这似乎与您问题的第一部分不符。 您想要从整数转换为字符串,还是从字符串转换为整数?

你也可以看看atoi()函数(ascii到整数)和它的亲戚, atolatoll等。

此外,还有相反的function,即itoa()和co。

您可能需要查看此站点上的合规解决方案

你可以试试:

 int intval; String stringval; //assign a value to intval here. stringval = String(intval); 

这应该够了吧。

这不是最佳解决方案。 这是我的解决方案,给出了多项限制,因此如果您根据课程/教师的指导资源有限,这可能非常适合您。

还要注意,这只是我自己的项目工具的一小部分,我必须读取操作数和数字,所以我使用了getchars。 否则,如果你只需要整数而没有其他类型的字符,我喜欢使用它:

 int k; while (scanf("%d", &k) == 1) 

这些规则并不是特定的“高级”C概念:没有字符串变量,没有结构,没有指针,没有涵盖的方法,我们被允许的唯一包括#include

因此,没有像atoi()那样的简单方法调用或者任何可以使用的String变量,我选择强制它。

1:使用getchar读取字符(fgets被禁止)。 如果字符无效,则返回1(退出状态1)。 对于基于Java 1中的parseInt的问题,11 11 13是有效的,但是1 11 1a无效,因此对于所有值,如果所有字符都是0-9忽略空格,则我们有一个有效的“字符串”。

2:将char的ASCII值转换为其整数值(例如,48 => 0)

3:使用变量val来存储int,使得对于“子串”中的每个char,存在相应的整数位。 即“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工具的方法概念,这可能是你正在寻找的。