在C ++中填充动态大小的数组并使用这些值

时间:2012-11-08 13:28:19

标签: c memory-management arrays

我想动态填充char数组并检查包含的值是否是有效整数,这是我到目前为止所得到的:

for(int i = 0; i < 50000; i++)
    {
        if(input[i] == ',')
        {
            commaIndex = i;
        }
    }

commaIndex是文件中逗号的索引,应该在逗号之前输入数值,文件如下所示:-44,5,19,-3,13,(etc),这对于此部分很重要:

char *tempNumber = new char[commaIndex];

填充tempNumber(可能与我的动态分配一样大,因此我没有一个50000字符数组(命名输入)的数字。

for(int i = 0; i < commaIndex; i++)
    {
            cout << i << "\n";
            tempNumber[i] = input[i];
    }

现在我想用它:

if(!isValidInteger(tempNumber))
    {
        cout << "ERROR!\n";
    }

不幸的是,无论“commaIndex”的值如何,tempNumber似乎总是大小为4,即我得到以下输出:

(输入数据:50000,3,-4)

commaIndex:5 tempNumber的内容:5000(一个0缺失)

逗号索引:1 tempNumber的内容:3²²²(注意3 ^ 2s)

commaIndex:2 tempNumber的含量:-4²²

有什么想法吗?

还有一件事:这是一个家庭作业,我不允许使用任何面向对象的C ++元素(这包括字符串和向量,我一直在那里,我知道它会 SO < / em> easy。)

谢谢,

丹尼斯

2 个答案:

答案 0 :(得分:1)

您可能对strtol函数感兴趣。

答案 1 :(得分:1)

您也可以考虑将strtok()sscanf()一起使用。请注意,strtol()不允许您检查错误,因为它只是在解析错误时返回(完全有效)值0。另一方面,sscanf()返回成功读取项目的数量,因此您可以在阅读数字时轻松检查是否有错误。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    int i = 0;
    char str[] = "1,2,-3,+4,a6,6";

    /* calculate result table size and alloc */
    int max = 1;
    char* tmp = str;
    while (*tmp)
        if (*tmp++ == ',')
            ++max;

    int* nums = malloc(sizeof(int) * max);

    /* tokenize string by , and extract numbers */
    char* pch = strtok(str, ",");
    while (pch != NULL) {
        if (sscanf(pch, "%d", &nums[i++]) == 0)
            printf("Not a number: %s\n", pch);
        pch = strtok(NULL, ",");
    }

    /* print read numbers */
    for (i = 0; i < max; ++i)
        printf("%d\n", nums[i]);

    free(nums);

    return 0;
}