C 使用 strtok() 将字符串拆分为字符串数组,最后一个元素不为 NULL
C split string into string array using strtok() without NULL as last element
我有这样的字符串:
"monday,wednesday,friday"
我想将其保存到一个字符数组(~字符串数组)中。
char **splitString(char *string, int size, char delimiter)
{
char **ptr = (char **)malloc(size * sizeof(char *));
int i = 0;
ptr[i] = strtok(string, &delimiter);
while (ptr[i] != NULL)
{
ptr[++i] = strtok(NULL, &delimiter);
}
return ptr;
}
设法用上面的代码做到了,但由于它总是检查当前的标记化字符串,它不会在最后一个字符串处停止并读取一个额外的 NULL
。打印出我得到的数组:
The 0. element is: monday
The 1. element is: wednesday
The 2. element is: friday
The 3. element is: (null)
有没有一种简洁明了的方法可以知道循环何时到达最后一个元素?
使用类似这样的东西
char **splitString(char *string, int size, char delimiter)
{
char **ptr = (char **)malloc(size * sizeof(char *));
char *p;
int i = 0;
p = strtok(string, &delimiter);
while (p != NULL)
{
ptr[i++] = p;
p = strtok(NULL, &delimiter);
}
return ptr;
}
您可以使用 , 作为简单循环的分隔符:
counter = 0;
counter2;
char thing [][]
char YourString
for(i = 0;i<=20;i++){
if(YourString !=","){
thing[counter][i]=yourString[counter2]
}
else{
counter++;
}
counter2++;
}
嗯,您可以实现您的目标,只需将每个 ,
更改为 [=12=]
并将指针数组设置为指向字符串的第一个字符以及 [= 之后的每个字符11=]。有点像:
#include<stdio.h>
#include<stdlib.h>
char **split_string(char *str, int *size) {
int i;
*size = 1;
printf("size = %d\n", *size);
char **array = malloc(*size * sizeof(char *));
array[0] = &str[0];
for (i = 1; str[i] != 0; i++) {
if (str[i] == ',') {
(*size)++;
printf("size = %d\n", *size);
array = realloc(array, sizeof(char *) * (*size));
array[(*size) - 1] = &str[i + 1];
str[i] = '[=10=]';
}
}
return array;
}
int main() {
char str[] = "one,two,three";
int size;
char **array = split_string(str, &size);
for (int i=0; i < size; i++) {
printf("%s\n", array[i]);
}
return 0;
}
我有这样的字符串:
"monday,wednesday,friday"
我想将其保存到一个字符数组(~字符串数组)中。
char **splitString(char *string, int size, char delimiter)
{
char **ptr = (char **)malloc(size * sizeof(char *));
int i = 0;
ptr[i] = strtok(string, &delimiter);
while (ptr[i] != NULL)
{
ptr[++i] = strtok(NULL, &delimiter);
}
return ptr;
}
设法用上面的代码做到了,但由于它总是检查当前的标记化字符串,它不会在最后一个字符串处停止并读取一个额外的 NULL
。打印出我得到的数组:
The 0. element is: monday
The 1. element is: wednesday
The 2. element is: friday
The 3. element is: (null)
有没有一种简洁明了的方法可以知道循环何时到达最后一个元素?
使用类似这样的东西
char **splitString(char *string, int size, char delimiter)
{
char **ptr = (char **)malloc(size * sizeof(char *));
char *p;
int i = 0;
p = strtok(string, &delimiter);
while (p != NULL)
{
ptr[i++] = p;
p = strtok(NULL, &delimiter);
}
return ptr;
}
您可以使用 , 作为简单循环的分隔符:
counter = 0;
counter2;
char thing [][]
char YourString
for(i = 0;i<=20;i++){
if(YourString !=","){
thing[counter][i]=yourString[counter2]
}
else{
counter++;
}
counter2++;
}
嗯,您可以实现您的目标,只需将每个 ,
更改为 [=12=]
并将指针数组设置为指向字符串的第一个字符以及 [= 之后的每个字符11=]。有点像:
#include<stdio.h>
#include<stdlib.h>
char **split_string(char *str, int *size) {
int i;
*size = 1;
printf("size = %d\n", *size);
char **array = malloc(*size * sizeof(char *));
array[0] = &str[0];
for (i = 1; str[i] != 0; i++) {
if (str[i] == ',') {
(*size)++;
printf("size = %d\n", *size);
array = realloc(array, sizeof(char *) * (*size));
array[(*size) - 1] = &str[i + 1];
str[i] = '[=10=]';
}
}
return array;
}
int main() {
char str[] = "one,two,three";
int size;
char **array = split_string(str, &size);
for (int i=0; i < size; i++) {
printf("%s\n", array[i]);
}
return 0;
}