1)我需要从文件中读取一个字符串并将该字符串转换为链接列表
所以...如果我读这个字符串“ Some String”
链接列表如下所示
节点1-“ S”
node2-“ o”
node3-“ m”
node4-“ e”
node5-空
节点6-“ S”
node7-“ t”
node8-“ r”
node9-“ i”
node10-“ n”
node11-“ g”
node12-空
对于“”(空格)和“ \ 0”空字符,将发出NULL
什么是实现此目标的最佳方法?
typedef struct node
{
// each node holds a single character
char data;
// pointer to next node in linked list
struct node *next;
} node;
int i;
char buffer[1032];
FILE *ifp = fopen("file.txt", "rb");
//read the first line of file
fscanf(ifp, "%s", buffer);
node *myList = malloc(sizeof(node));
for(i = 0; i < strlen(buffer); i++)
/*I DON'T KNOW WHAT TO DO HERE!!!!*/
在这里我迷路了,或者如果我对自己的实现完全错了,请告诉我
最佳答案
您的fscanf(ifp, "%s", buffer);
在读取“ Some”后将停止。我改用fgets()。并在手册中(man fgets):
fgets()从流中读取的字符数最多小于大小字符
并将它们存储到s指向的缓冲区中。阅读
在EOF或换行符之后停止。如果读取换行符,则将其存储
进入缓冲区。在最后一个字符之后存储一个“ \ 0”
缓冲。
最后一个'\ 0'使得将缓冲区作为字符串来处理很方便。
所以我在FILE *ifp = fopen("file.txt", "rb");
之后的代码是:
fgets(buffer,1032-1,ifp);
node *myList,*head,*pre = NULL;
for(i = 0; buffer[i] != '\0' ; i++) {
myList = malloc(sizeof(node));
myList->data = buffer[i];
if(pre!=NULL)
pre->next = myList;
else
head = myList;
pre = myList;
}
while(head!=NULL) {
printf("%c\n",head->data);
head=head->next;
}
fclose(ifp);
您的工具将'\ n'和空格存储为NULL,在您进行更改时可以
myList->data = buffer[i];
至
if(buffer[i]=='\n' || buffer[i]==' ')
myList->data = 0;
else
myList->data = buffer[i];
关于c - 将字符串转换为链接列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17332410/