分割字符串转换成C中的整数数组(Split a string into an integer arr

2019-10-22 14:28发布

我有我正在组建一个C程序逗号分隔字符串,我想将它拆分成整数值的数组。 字符串可以包含任意数量的逗号分隔的值,所以我也不要有用于阵列的初始大小。

"345,3345,35,75,52,386"

和ID喜欢做这样的事情?

int parsedArray[] = parseString("345,3345,35,75,52,386");

这将是在Java或C#中的微风,但我觉得我是我的深度一点出来,当涉及到C.如何实现这一目标的任何想法?

Answer 1:

在您的文章中隐含的签名功能是不可能在C,因为函数无法返回一个动态大小的阵列。 两种选择都是可能的位置:

  • 传递数组和最大计数为parseString ,或
  • 返回一个表示动态分配的数组的指针,其实际尺寸沿。

所述第一方法限制该阵列由呼叫用户建立了一些数的大小; 第二种方法带有一个要求解除分配数组,一旦你用它做。

随后的第一种方法是这样的功能:

void parseString(int data[], size_t maxSize);

下面的第二种方法是这样的功能:

int *parseString(size_t *actualSize);

或者是这样的:

void parseString(int ** data, size_t *actualSize);

第二种情况,可以使用两个方法结合起来,虽然API会变得有些不太直观。

至于解析本身存在的诸多选项。 其中一个“轻量级”的选项是使用strtol ,就像这样:

char *end = str;
while(*end) {
    int n = strtol(str, &end, 10);
    printf("%d\n", n);
    while (*end == ',') {
        end++;
    }
    str = end;
}

演示。



Answer 2:

p是一个指向您的字符串

int parsedArray[1024];                                                     
int nb = 0;

while (nb < sizeof(parsedArray) && *p) {                                   
    parsedArray[nb++] = strtol(p, &p, 10);                                 
    if (*p != ',')                                                         
        break;                                                             
    p++; /* skip, */                                                       
}

nb是解析INT的数



Answer 3:

我想看看C函数的strtok() ,并使用通过您的字符串进行迭代,每个元素。 使用的atoi()给每个元素解析为整数。



Answer 4:

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

int main ()
{
  char str[] = "7,4200,4450, 500,1600, 500,550,600"; 


// Returns first token 
char *token = strtok(str, ","); 

int size=atoi(token);
int signal[size];
int i=0;

// Keep printing tokens while one of the 
// delimiters present in str[]. 
while (token != NULL) 
{ 
printf("%s\n", token); 
token = strtok(NULL, ","); 
if(token !=NULL){
signal[i]=atoi(token);
printf("%d --", signal[i]);
i=i+1;

}
} 

return 0; 
}


文章来源: Split a string into an integer array in C
标签: c arrays string