gpt4 book ai didi

c - 当输入是以空格分隔的整数时,如何将动态创建的字符数组转换为整数数组

转载 作者:太空宇宙 更新时间:2023-11-04 03:28:49 28 4
gpt4 key购买 nike

我想创建两个数组,一个是字符数组,第二个是整数数组。当用户提供有关整数元素数量的输入时,两者都是动态创建的。所有整数都由空格分隔。

输入:

第一行由N组成,这里N是整数的个数。假设用户输入 5,下一行将包含 N 个以空格分隔的整数。即 5 个整数 5 10 23 456 2

输出:

输出将显示整数数组中的元素,即 int_array[i]、int_array[i+1].... 5,10 ...

但是当我尝试使用我的代码时,我只能从整数数组中看到 0。

代码如下:

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

int *cstois(char *char_array, int *int_array, int n) {
int i, j;
for (i = 0, j = 0; i < n; i++) {
if (char_array[i] >= '0' && char_array[i] <= '9') {
int_array[j] == int_array[j] * 10 + (char_array[i] - '0');
} else
if (char_array[i] == ' ') {
j++;
} else
continue;
}
return int_array;
}

int main() {
int i, n;
printf("enter no. of elements");
scanf("%d\n", &n);
char *char_array;
char_array = (char*)malloc(n * sizeof(int));
fgets(char_array, sizeof(char_array), stdin);
int *int_array = (int*)calloc(n, sizeof(int));
cstois(&char_array[0], &int_array[0], n);
for (i = 0; i < n; i++)
printf("%d\n", int_array[i]);
free(char_array);
free(int_array);
return 0;
}

最佳答案

您的代码中存在多个问题:

  • 没有标准标题<malloc.h> . malloc()<stdlib.h> 中定义.

  • 在函数中 cstois() ,由于拼写错误,您没有正确更新号码:int_array[j] == int_array[j] * 10 + (char_array[i] - '0');应该是 int_array[j] = int_array[j] * 10 + (char_array[i] - '0');

  • 您忽略所有非数字或空格字符的字符。这不一定正确:1,2,3将被解析为 123而不是被报告为错误。

  • 更糟糕的是,您没有检查 '\0'扫描输入缓冲区时。如果从用户读取的行中没有足够的数字,您将扫描到字符串末尾之外,并可能超出数组末尾,从而调用未定义的行为。

  • 您跳到空格字符处的下一个元素。用多个空格分隔数字会导致数字被错误地跳过。

  • 你不能处理负数。

  • 在函数中 main() ,输入数组分配为 char_array = (char*)malloc(n * sizeof(int)); .这是不正确的,因为它将 32 位整数的平均位数限制为 3 位...您应该为每个数字至少分配 20 位数字以允许大整数。

  • 从用户那里读取的行 fgets()悲惨地短:sizeof(char_array)是指针的大小,而不是分配给数组的大小。将该大小保存到一个变量并将其传递给 malloc()fgets() .

  • 您没有检查 scanf() 的返回值, 也不是 fgets() 的或 malloc() .空文件将无法正确处理。

处理多个空格分隔符和负数的简单方法是使用 strtol() :

int *cstois(char *char_array, int *int_array, int n) {
for (int i = 0; i < n; i++) {
int_array[i] = strtol(char_array, &char_array, 10);
}
return int_array;
}

这个简单的实现将在第一个非数字处停止并填充 int_array 中的所有剩余条目与 0 .缺失的数字同样会在数组中产生零值。

关于c - 当输入是以空格分隔的整数时,如何将动态创建的字符数组转换为整数数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38944658/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com