将字符数组转换为整数数组?

4

我是C语言的初学者。我有一个字符数组,格式例如"12 23 45 9"。如何将它转换为整数数组{12, 23, 45, 9}?谢谢提前。

5个回答

5

是的,但它将我的数组分割成{1,2,3,4,5,9}并继续循环。如何结束循环? - Brdjo
展示你所拥有的,以便可以修复。 - Karl Knechtel

1

传统但已弃用的方法是使用strtok()。现代替代方案是strsep()。下面是一个直接从strsep()手册中摘取的示例:

char **ap, *argv[10], *inputstring;

for (ap = argv; (*ap = strsep(&inputstring, " \t")) != NULL;)
    if (**ap != '\0')
        if (++ap >= &argv[10])
            break;

该程序将使用提供的分隔符(空格、制表符)将输入字符串分成片段,并对这些片段进行迭代。您应该能够修改上述内容,使用 atoi() 将每个片段转换为整数。主要问题是 strsep() 修改了输入字符串,因此不具备线程安全性。

如果您知道输入字符串始终包含相同数量的整数,则另一种方法是使用 sscanf() 一次性读取所有整数:

char *input = "12 23 45 9";
int output[5];

sscanf(inputstring, "%d %d %d %d %d", &output[0], &output[1], &output[2], &output[3], &output[4]);

0
你需要包含 stdlib.h。
//get n,maxDigits
char** p = malloc(sizeof(char*) * n);
int i; 
for(i=0;i<n;i++)
p[i] = malloc(sizeof(char) * maxDigits);

//copy your {12,23,45,9}  into the string array p, or do your own manipulation to compute string array p.

int* a = malloc(sizeof(int) * n);
int i;         
for(i=0;i<n;i++)
a[i] = atoi(p[i]);

0

您可以使用以下技术计算单个数字(但它不会将它们转换为整数):

请注意,我使用int迭代循环使其易读。通常,您只需增加char指针本身:

void PrintInts(const char Arr[])
{
    int Iter = 0;
    while(Arr[Iter])
    {
        if( (Arr[Iter] >= '0') && (Arr[Iter]) <= '9')
        {
            printf("Arr[%d] is: %d",Iter, (Arr[Iter]-'0') );
        }
    }
    return;
}

上述将通过减去0-9集合中最低的ASCII表示来将ASCII数转换回int数。例如,如果“0”由40表示(实际情况并非如此),而“1”由41表示(实际情况并非如此),则41-40 = 1。
要获得所需的结果,您需要使用strtok和atoi函数:
//Assumes Numbers has enough space allocated for this
int PrintInts(const int Numbers[] const char Arr[])
{
    char *C_Ptr = strtok(Arr," ");
    int Iter = 0;
    while(C_Ptr != NULL)
    {
        Numbers[Iter] = atoi(C_Ptr);
        Iter++;
        C_Ptr = strtok(NULL," ");
    }
    return (Iter-1); //Returns how many numbers were input
}

-1

怎么样:

const char *string = "12 23 45 9";
int i, numbers[MAX_NUMBERS];         //or allocated dynamically
char *end, *str = string;
for(i=0; *str && i<MAX_NUMBERS; ++i)
{
    numbers[i] = strtol(str, &end, 10);
    str = end;
};

如果字符串在最后一个数字之后有空格,那么您的数字数组可能会出现尾随0。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接