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

标签 c arrays string pointers

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

相关文章:

c - Openmp并行循环

c - fork() 函数在这个程序中是如何工作的?

javascript - 根据成员属性从数组中删除元素

PHP array_map 函数内的回调函数

c# - 如何将字符串解析为 BigInteger?

java - 正则表达式括号或数字行首

c - 在互斥锁内调用 sleep() 有什么缺点?

c++ - 在 C 中读取 JPEG 文件的 RGB 三元组

php - 来自两列 MySQL 表的两列数组

c# - 检测并替换字符串中的所有表情符号