我有我正在组建一个C程序逗号分隔字符串,我想将它拆分成整数值的数组。 字符串可以包含任意数量的逗号分隔的值,所以我也不要有用于阵列的初始大小。
如
"345,3345,35,75,52,386"
和ID喜欢做这样的事情?
int parsedArray[] = parseString("345,3345,35,75,52,386");
这将是在Java或C#中的微风,但我觉得我是我的深度一点出来,当涉及到C.如何实现这一目标的任何想法?
我有我正在组建一个C程序逗号分隔字符串,我想将它拆分成整数值的数组。 字符串可以包含任意数量的逗号分隔的值,所以我也不要有用于阵列的初始大小。
如
"345,3345,35,75,52,386"
和ID喜欢做这样的事情?
int parsedArray[] = parseString("345,3345,35,75,52,386");
这将是在Java或C#中的微风,但我觉得我是我的深度一点出来,当涉及到C.如何实现这一目标的任何想法?
在您的文章中隐含的签名功能是不可能在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;
}
演示。
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的数
我想看看C函数的strtok() ,并使用通过您的字符串进行迭代,每个元素。 使用的atoi()给每个元素解析为整数。
#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;
}