我尝试使用fgets读取文件并使用strtok将其标记,但不知何故我丢失了第一个标记(标题)的最后一个字符。我已经尝试了一段时间来解决这个问题,但似乎无法做到这一点任何帮助表示赞赏。我虽然在分隔符之前添加了一个字符,但我不太确定如何实现它。
char line[201];
char *title;
int year;
char *age;
char *genre;
int lenght;
float rating;
while ((fgets(line,sizeof(line),fp)) != NULL){
strtok(line,"\"");
title = line;
year = atoi(strtok(NULL,","));
age = strtok(NULL,",");
memmove(age, age+1, strlen(age));
genre = strtok(NULL,",");
memmove(genre, genre+1, strlen(genre));
lenght = atoi(strtok(NULL,","));
rating = atof(strtok(NULL,","));
x = new_film(title,year,age,genre,lenght,rating);
Insert(root, x);
}
文件数据如下所示:
"好的,坏的和丑的",1966,"批准"," Western",161,8.9 "备忘录",2000年," R""推理/惊悚",113,8.5
输出如下:
Good,the Bad and the Ugl,1966,APPROVED,Western,161,8.9
答案 0 :(得分:1)
你忽略了std::string remove(const char* toRemove, const char* original) {
return remove(std::string(toRemove), std::string(original));
}
的返回值,并试图弄清楚它正在分离的字符串。我建议这样做(尽管你应该经常检查错误的数据格式,例如当strtok
返回strtok
时):
NULL
节目输出:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
char line[201];
char *title;
int year;
char *age;
char *genre;
int lenght;
float rating;
while ((fgets(line,sizeof(line),stdin)) != NULL){
title = strtok(line, "\""); // use this value
year = atoi(strtok(NULL, "\",\n")); // added delimiters
age = strtok(NULL, "\",\n");
genre = strtok(NULL, "\",\n");
lenght = atoi(strtok(NULL, "\",\n"));
rating = (float)atof(strtok(NULL, "\",\n"));
printf("%s\n", title);
printf("%d\n", year);
printf("%s\n", age);
printf("%s\n", genre);
printf("%d\n", lenght);
printf("%f\n", rating);
printf("\n");
}
return 0;
}
答案 1 :(得分:0)
注意:&#39;标题&#39;有一个主要的分隔符,
当要检查的下一个字符是分隔符时,您应该非常小心。
强烈建议您始终使用,
(逗号)的分隔符作为当前数据示例。
如果你想(稍后)删除任何``&#34;`(双引号),那么周围的双引号仍将存在并可以轻松删除。
让我们记住strtok()
用NUL字节替换分隔符,因此strtok()
的第一次调用(在已发布的代码中)已经修剪了尾随的双引号