C语言 如何将一行整数拆分为数组?



如果用户输入:

1 2 3 4 5 0

如何将其转换为包含 5 个元素的数组(0 整数表示终止(?此外,在代码中,我需要确保它适用于多达 500 个整数。

我不知道如何进行。我正在考虑使用 get 并将其保存到分配的空间中:

char *ptr;
ptr = malloc(sizeof(char) * 1000);
fgets(ptr, sizeof(char)*1000, stdin);

这里的问题是我不确定如何分配空间,因为每个数字都将保存为一个字符,并且每个整数可能具有不同的位数。

之后,我不确定如何将其拆分为数组。

有人可以建议我如何继续或我的方法不好吗?

我知道我没有做很多事情,但我真的很困惑。我查了一下gets()fgets()scanf()fscanf(),但仍然不确定。

谢谢!

您可以使用sscanf()strtol()解析用户输入的行:

#include <stdio.h>
int main() {
char buf[256];
int array[5];
if (fgets(buf, sizeof buf, stdin)) {
if (sscanf(buf, "%d%d%d%d%d", &array[0], &array[1], &array[2], &array[3], &array[4]) == 5) {
// array has the 5 numbers input by the user.
printf("%d %d %d %d %dn", array[0], array[1], array[2], array[3], array[4]);
}
}
return 0;
}

对于最多处理 500 个数字的通用代码,您可以在循环中使用scanf()

#include <stdio.h>
int main() {
int array[500];
int i, n;
for (n = 0; n < 500; n++) {
if (scanf("%d", &array[n]) != 1) {
printf("invalid inputn");
return 1;
}
if (array[n] == 0) {
// 0 indicates termination
break;
}
}
// the array has n valid non-zero numbers
printf("The numbers are:n");
for (i = 0; i < n; i++) {
printf("  %dn", array[i]);
}
return 0;
}

您可以使用组合fgets()strtok()的字符数组。

首先声明一个字符数组str并设置一个标志变量。

char str[100];
int flag=1;

当找到输入0时,可能会0flag

只要flag1就使用fgets()读取一行输入(前提是fgets()成功(,如

while(flag==1 && fgets(str, sizeof(str), stdin)!=NULL)
{
.....
.....
} 

现在在此循环中,使用strtok()以空格和n作为分隔符来标记str中的字符串。n被设为分隔符,因为fgets()在尾随n中读取到str

for(ptr=strtok(str, " n"); ptr!=NULL; ptr=strtok(NULL, " n"))
{
n=atoi(ptr);
if(n==0)
{
flag=0;
break;
}
printf("n%d", n);  
}

strtok()生成的令牌转换为整数。为了简洁起见,我使用了atoi(),但这不是最好的方法。strtol()可能是个好主意。看这里。

我会建议这样的东西

#include "rlutil.h" //a good library similar to conio.h or it's Linux equivalent but cross-platform. You have to include it manually and download it at github.
int i = 0;
int num = 1;
char input;
int array[255];
for (i = 0; num = 0; i++)
{
input = getchar();
num = input - '0';
array[i] = num;
printf("%i ", num);
}

只需注意数组的大小即可。

此外,您可以使用strtok解析使用fgets获得的字符串。如果您愿意,我可以稍后编辑这篇文章并包含此变体。