使用字符串读取数字

时间:2009-10-30 18:03:17

标签: c arrays string

我需要编写一个将接收x个数字的函数。 (x作为参数读入函数)数字可以在任意数量的空格和换行符之前和之间分隔,在输入最后一个数字后,换行符结束扫描。我想过使用字符串接受字符,并忽略任何无数字字符。输入数字字符时,它将被读入字符串,以及后面的任何数字字符。当在数字后面输入空格或换行符时,我希望将字符串中的数字输入数组。

因此,如果字符串包含{'1','3','2'},我想将“132”的值放入数组的单元格中。

我会设置一个计数器来计算一个数字放在一个数组中,当达到所需数量的数字时,该函数将返回。

这是我到目前为止所拥有的:

    void read_vector(int* v, int n)
    {
        int value, i = 0, j = 0, k;
        char num, str[9];

        do 
        {
            num = getchar();

            if (num > 47 && num < 58) 
            {
                while (i < 10) 
                {    
                    str[i] = num;
                    i++;
                    num = getchar();

                   if (i = 9 || num < 47 || num > 58) 
                   {
                       str[i] = '\0'
                       j++;

                       for(k = 1; k <= strlen(str); k++) 
                       {
                           value += str[k - 1] * pow(10, (strlen(str) - k));
                       }

                       v[j] = value

                       if(j = n)
                           return;
                   }
               }
           }
       } 

       while (1);
   }

由于

3 个答案:

答案 0 :(得分:2)

我会使用scanf系列的成员,具体取决于您的输入的呈现方式。 fscanf()几乎可以满足您的要求。

答案 1 :(得分:1)

我建议您使用strtok()将字符串拆分为令牌,然后使用atoi()atol()atof()将文本转换为数字。例如:

void
read_nums(int count, double *buffer, char *str)
{
    int i;
    char *str2;

    // Read the first token
    str2 = strtok(srt, " \n\t\r");

    for (i = 0; i < count;) {
        if (*str2)
            // Convert and store the number
            buffer[i++] = atof(str2);

        // Read the next token
        str2 = strtok(NULL, " \n\t\r");
    }
}

我建议您查看一些关于这些函数的好文档,以确切了解如何实现它(我从未真正测试过这个示例,并且无法检查是否正确。)

答案 2 :(得分:0)

首先,您似乎对在C中使用比较运算符感到有些困惑。查看comparison and logical operators in C

现在你的ifs不会做你期望他们做的事情

并不是挑剔或任何事情,但你的第一个循环可能更适合你的需要作为 for 循环,因为你还需要一个计数器。