我在C应用程序中有一个逗号分隔的字符串,我将它放在一起,我想将其拆分为整数值数组。 该字符串可以包含任意数量的逗号分隔值,因此我也没有该数组的初始大小。
e.g。
"345,3345,35,75,52,386"
并且喜欢做类似......
的事情int parsedArray[] = parseString("345,3345,35,75,52,386");
这在java或c#中都是轻而易举的但我认为在谈到C时我有点偏离我的深度。 有关如何实现这一目标的任何想法?
答案 0 :(得分:2)
在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;
}
答案 1 :(得分:1)
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的数量
答案 2 :(得分:0)
答案 3 :(得分:0)
#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;
}