在C语言中将字符串拆分为整数数组
我在一个C应用程序中有一个逗号分隔的字符串,我要把它拆分成一个整数值数组。 字符串可以包含任意数量的逗号分隔值,因此我也没有数组的初始大小 e、 g 我想做一些像在C语言中将字符串拆分为整数数组,c,arrays,string,C,Arrays,String,我在一个C应用程序中有一个逗号分隔的字符串,我要把它拆分成一个整数值数组。 字符串可以包含任意数量的逗号分隔值,因此我也没有数组的初始大小 e、 g 我想做一些像 int parsedArray[] = parseString("345,3345,35,75,52,386"); 这对java或c来说是一件轻而易举的事,但我认为我对c有点不了解。 关于如何实现这一点有什么想法吗?我将研究C函数,并使用它来迭代字符串并提取每个元素。用于将每个元素解析为整数。我将查看C函数,并使用它迭代字符串并提取
int parsedArray[] = parseString("345,3345,35,75,52,386");
这对java或c来说是一件轻而易举的事,但我认为我对c有点不了解。
关于如何实现这一点有什么想法吗?我将研究C函数,并使用它来迭代字符串并提取每个元素。用于将每个元素解析为整数。我将查看C函数,并使用它迭代字符串并提取每个元素。用于将每个元素解析为整数。是指向字符串的指针
int parsedArray[1024];
int nb = 0;
while (nb < sizeof(parsedArray) && *p) {
parsedArray[nb++] = strtol(p, &p, 10);
if (*p != ',')
break;
p++; /* skip, */
}
nb是已解析的int数,它是指向字符串的指针
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语言中,不可能使用文章中暗示的签名函数,因为函数无法返回动态大小的数组。这里有两种选择: 将数组和最大计数传递到parseString中,或 返回表示动态分配数组的指针及其实际大小。 第一种方法将数组的大小限制为调用者建立的某个数字;第二种方法需要在处理完阵列后释放它 遵循第一种方法的函数如下所示:
void parseString(int data[], size_t maxSize);
int *parseString(size_t *actualSize);
void parseString(int ** data, size_t *actualSize);
char *end = str;
while(*end) {
int n = strtol(str, &end, 10);
printf("%d\n", n);
while (*end == ',') {
end++;
}
str = end;
}
遵循第二种方法的函数如下所示:
void parseString(int data[], size_t maxSize);
int *parseString(size_t *actualSize);
void parseString(int ** data, size_t *actualSize);
char *end = str;
while(*end) {
int n = strtol(str, &end, 10);
printf("%d\n", n);
while (*end == ',') {
end++;
}
str = end;
}
或者像这样:
void parseString(int data[], size_t maxSize);
int *parseString(size_t *actualSize);
void parseString(int ** data, size_t *actualSize);
char *end = str;
while(*end) {
int n = strtol(str, &end, 10);
printf("%d\n", n);
while (*end == ',') {
end++;
}
str = end;
}
第二种情况可用于结合这两种方法,尽管API会变得不那么直观
至于解析本身,存在许多选项。轻量级选项之一是使用strtol,如下所示:
void parseString(int data[], size_t maxSize);
int *parseString(size_t *actualSize);
void parseString(int ** data, size_t *actualSize);
char *end = str;
while(*end) {
int n = strtol(str, &end, 10);
printf("%d\n", n);
while (*end == ',') {
end++;
}
str = end;
}
在C语言中,不可能使用文章中暗示的签名函数,因为函数不能返回动态大小的数组。这里有两种选择: 将数组和最大计数传递到parseString中,或 返回表示动态分配数组的指针及其实际大小。 第一种方法将数组的大小限制为调用者建立的某个数字;第二种方法需要在处理完阵列后释放它 遵循第一种方法的函数如下所示:
void parseString(int data[], size_t maxSize);
int *parseString(size_t *actualSize);
void parseString(int ** data, size_t *actualSize);
char *end = str;
while(*end) {
int n = strtol(str, &end, 10);
printf("%d\n", n);
while (*end == ',') {
end++;
}
str = end;
}
遵循第二种方法的函数如下所示:
void parseString(int data[], size_t maxSize);
int *parseString(size_t *actualSize);
void parseString(int ** data, size_t *actualSize);
char *end = str;
while(*end) {
int n = strtol(str, &end, 10);
printf("%d\n", n);
while (*end == ',') {
end++;
}
str = end;
}
或者像这样:
void parseString(int data[], size_t maxSize);
int *parseString(size_t *actualSize);
void parseString(int ** data, size_t *actualSize);
char *end = str;
while(*end) {
int n = strtol(str, &end, 10);
printf("%d\n", n);
while (*end == ',') {
end++;
}
str = end;
}
第二种情况可用于结合这两种方法,尽管API会变得不那么直观
至于解析本身,存在许多选项。轻量级选项之一是使用strtol,如下所示:
void parseString(int data[], size_t maxSize);
int *parseString(size_t *actualSize);
void parseString(int ** data, size_t *actualSize);
char *end = str;
while(*end) {
int n = strtol(str, &end, 10);
printf("%d\n", n);
while (*end == ',') {
end++;
}
str = end;
}