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/

10-11 06:29
查看更多