字符串由链表输入

时间:2014-08-31 07:41:02

标签: c linked-list

有没有办法通过链表?

获取字符串输入(就像我们对任何整数所做的那样)

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

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

我想接受任何输入字符串,例如 - "asdfghj",其字符串长度未知?

3 个答案:

答案 0 :(得分:3)

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

假设您正在使用C ++ 11

int main()
{
    LinkedList list;
    string input;
    cin >> input;

    for(auto i: input)
    {
        list.addNode(i);
    }
}

答案 1 :(得分:0)

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;
}

答案 2 :(得分:0)

你可以轻松思考。因为你可以声明一个字符串变量而不是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;

}