gpt4 book ai didi

c - 如何将字符串转换为int并将结果放入数组

转载 作者:行者123 更新时间:2023-11-30 19:13:49 26 4
gpt4 key购买 nike

我试图将仅由空格分隔的数字给出的字符串转换为 int 数组。

int make_array(char s1[]){
// convert string and puts result into array
char *endp = s1;
int sum,i;
int len=strlen(s1);
int *array=(int*)malloc((len)*sizeof(int));
for(i=0;i<len;i++)
if(s1[i]!=" ")
array[i]=strtol(s1, &endp, 10);
s1=endp;
return array;

该函数不起作用,因为它给了我一个随机数。有人可以给我一些建议吗?

最佳答案

这是您的方法的一个工作版本(仍有一个问题):

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

int * make_array(char s1[], int * arraylen){
// convert string and puts result into array
char *endp = s1;
int i, j=0;
int len=strlen(s1);
int *array = malloc(len*sizeof(int));
for (i=0;i<len;i++)
if(s1[i]!=' ') {
array[ j++ ]=strtol(s1, &endp, 10);
s1=endp;
}
*arraylen = j;
return array;
}

int main() {
int arraylen = 0, i;
int * array = make_array( "9 8 7 123", & arraylen );
for ( i = 0; i < arraylen; i ++ )
printf( "[%i]: %d\n", i, array[i] );
}

主要变化:

  • if内设置s1
  • 添加参数arraylen - make_array 的调用者如何知道数组的长度?
  • 将返回类型更改为 int *,因为我们返回的是 array
  • 字符 s1[i] 与字符' '(不是字符串"")进行比较.
  • 对输出数组使用单独的索引,因为输入索引也会对空格进行计数,这最终将作为输出数组中的随机条目(除非您使用 memset( array, 0 ,len*sizeof(int)) 首先)。

输出

[0]: 9
[1]: 8
[2]: 7
[3]: 123
[4]: 0
[5]: 0
[6]: 0

如果您只期望单位数字,那么它应该可以正常工作,但 strtol 会读取多个数字(如果可用)。如果您只想读取数字,您可以:

   array[ j++ ] = s1[i] - '0';

如果数字可以有多个数字,您会这样做:

for (i=0;i<len;)
if ( s1[i] == ' ')
i++;
else {
array[ j++ ]=strtol(s1, &endp, 10);
i += endp - s1;
s1=endp;
}

获取输出

[0]: 9
[1]: 8
[2]: 7
[3]: 123

关于c - 如何将字符串转换为int并将结果放入数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35115335/

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