我试图将仅由空格分隔的数字给出的字符串转换为 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/