检查 strtok 上的分隔符是否为空节点值
Checking delimiter on strtok for empty node values
所以我必须将链表写入文件,然后将值读入新列表,我似乎遇到的问题是当我使用 strtok 并尝试传入空节点时,例如“ ”。我有分隔符,标记为“z”用于立即测试,我知道当 strtok 看到两个分隔符彼此相邻时,它会完全跳过,直到找到另一个值。
我的问题是,有没有一种方法可以手动检查两个定界符何时彼此相邻,然后将一个空节点添加到我的列表中,或者这个练习是否有更简单的解决方案?
typedef struct NODE {
char * value;
struct NODE * next;
}
Node;
typedef Node ** List;
int saving_list(List list, char * fileName) {
FILE * fptr;
fptr = fopen(fileName, "w");
char * s = "z";
//char * t = "3";
Node * list1 = * list;
int count = 0;
if (fptr == NULL) {
return -1;
}
while (list1 != NULL) {
// fputs( list1 -> value, fptr);
//fputs(s, fptr);
fputs(list1->value, fptr);
fputs(s, fptr);
list1 = list1 -> next;
count++;
}
fclose(fptr);
return count;
}
List loading_list(char * fileName) {
List list = new_list();
FILE * fptr;
char buff[255];
char * s = "z";
char * token;
fptr = fopen(fileName, "r");
if (fptr == NULL) {
return NULL;
}
fgets(buff, 255, (FILE * ) fptr);
token = strtok(buff, s);
//token = strsep (&buff, s);
while (token != NULL) {
char * result = malloc(sizeof(buff));
strcpy(result, token);
push(list,result);
token = strtok(NULL, s);
}
fclose(fptr);
return list;
}
}
您可以写值的长度而不是定界符。如果你希望它是人类可读的格式,那么你可以使用 strtol,并且你需要在长度和值之间有一个分隔符,因为值可能以数字开头。
所以我必须将链表写入文件,然后将值读入新列表,我似乎遇到的问题是当我使用 strtok 并尝试传入空节点时,例如“ ”。我有分隔符,标记为“z”用于立即测试,我知道当 strtok 看到两个分隔符彼此相邻时,它会完全跳过,直到找到另一个值。
我的问题是,有没有一种方法可以手动检查两个定界符何时彼此相邻,然后将一个空节点添加到我的列表中,或者这个练习是否有更简单的解决方案?
typedef struct NODE {
char * value;
struct NODE * next;
}
Node;
typedef Node ** List;
int saving_list(List list, char * fileName) {
FILE * fptr;
fptr = fopen(fileName, "w");
char * s = "z";
//char * t = "3";
Node * list1 = * list;
int count = 0;
if (fptr == NULL) {
return -1;
}
while (list1 != NULL) {
// fputs( list1 -> value, fptr);
//fputs(s, fptr);
fputs(list1->value, fptr);
fputs(s, fptr);
list1 = list1 -> next;
count++;
}
fclose(fptr);
return count;
}
List loading_list(char * fileName) {
List list = new_list();
FILE * fptr;
char buff[255];
char * s = "z";
char * token;
fptr = fopen(fileName, "r");
if (fptr == NULL) {
return NULL;
}
fgets(buff, 255, (FILE * ) fptr);
token = strtok(buff, s);
//token = strsep (&buff, s);
while (token != NULL) {
char * result = malloc(sizeof(buff));
strcpy(result, token);
push(list,result);
token = strtok(NULL, s);
}
fclose(fptr);
return list;
}
}
您可以写值的长度而不是定界符。如果你希望它是人类可读的格式,那么你可以使用 strtol,并且你需要在长度和值之间有一个分隔符,因为值可能以数字开头。