将整数解析为字符串C.

时间:2009-01-25 23:38:30

标签: c string parsing int

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

9 个答案:

答案 0 :(得分:47)

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

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

答案 1 :(得分:15)

将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/

答案 2 :(得分:10)

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

答案 3 :(得分:2)

这是Steve Summit的C常见问题解答中的discussed

答案 4 :(得分:1)

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

答案 5 :(得分:1)

您还可以查看atoi()函数(ascii到整数)及其亲属,atolatoll等。

此外,还有一些功能可以反过来,即itoa()和co。

答案 6 :(得分:0)

您可能需要查看this site上的兼容解决方案

答案 7 :(得分:0)

您可以尝试:

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

应该这样做。

答案 8 :(得分:-1)

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

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

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

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

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

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

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

3:使用变量val来存储一个int,这样对于“substring”中的每个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工具的方法概念,这可能是你正在寻找的。