c-链表输入的字符串



有没有任何方法可以通过链表获得字符串输入(就像我们对任何整数所做的那样)??

例如:此代码显示运行时错误:

struct node
{
    char c;
    struct node *link;
};
while(1)
{
    val=getch();
    if(val!=10)
         add(&a[i],val);
    else
        break;
 }

我想取任何像-"asdfghj"这样的输入字符串,其中的字符串长度是未知的?

假设您有一个LinkedList-类,它充当链接列表的接口,并且它具有以正确方式向列表添加node的函数addNode()。我还假设您想知道的是如何使输入的string中的每个char成为链表中的node,并且您知道如何管理链表。

假设您使用的是C++11

int main()
{
    LinkedList list;
    string input;
    cin >> input;
    for(auto i: input)
    {
        list.addNode(i);
    }
}

C 示例

#include <stdio.h>
#include <stdlib.h>
typedef struct node {
    char c;
    struct node *link;
} Node;
typedef struct s_ {
    Node *top;
    Node *curr;
} String;
Node *Node_new(char ch){
    Node *p = calloc(1, sizeof *p);
    p->c = ch;
    return p;
}
String *String_new(void){
    String *p = calloc(1, sizeof *p);
    return p;
}
void String_drop(String *s){
    Node *p = s->top;
    while(p){
        s->curr = p;
        p = p->link;
        free(s->curr);
    }
    //s->top = s->curr = NULL;
    free(s);
}
void String_add(String *s, char c){
    if(s->top == NULL){
        s->curr = s->top = Node_new(c);
    } else {
        s->curr = s->curr->link = Node_new(c);
    }
}
String *get_string(FILE *fp){
    String *s = String_new();
    int ch;
    while(EOF!=(ch=fgetc(fp)) && ch !='n'){
        String_add(s, (char)ch);
    }
    return s;
}
void put_string(String *s){
    Node *p;
    for(p = s->top; p ; p = p->link)
        putchar(p->c);
    putchar('n');
}
int main(void) {
    String *s = get_string(stdin);
    put_string(s);
    String_drop(s);
    return 0;
}

您可以轻松思考。As您只需要声明一个字符串变量而不是char。然后,您可以通过创建一个结构变量来正常接受输入。例如:

#include <bits/stdc++.h>
using  namespace std;
struct node
{
    string s;
    struct node *link;
};

int main(){
     node ob;
     cin>>ob.s;
     cout<<ob.s;
}

相关内容

  • 没有找到相关文章

最新更新