Как выполнить функцию «буквы»? (связанный список) - PullRequest
0 голосов
/ 13 мая 2019

Я новичок в связанном списке и надеюсь, что кто-нибудь мне поможет.

Домашнее задание хочет: ввести строку (от пользователя), сохранить ее в связанном списке и сосчитать появившиеся буквы.Например: input: hello output: hello h: 1 e: 1 l: 2 o: 1.

В данный момент у меня есть код ниже, и я хочу немного помочь с функцией «букв».Спасибо!

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct charact {
    char ch;
    int occurs;
    struct charact *next;
};

typedef struct charact Char;
typedef Char *ListofChar;
typedef Char *CharNode_ptr;
void letters(char name[50], ListofChar *chars_ptr);
void report(ListofChar chars);
Char *createnode(char ch);

int main() {
    char name[50];
    ListofChar chars = NULL;
    scanf("%s", name);
    letters(name, &chars);
    report(chars);
    return 0;
}

Char *createnode(char ch) {
    CharNode_ptr newnode_ptr ;
    newnode_ptr = malloc(sizeof (Char));
    newnode_ptr -> ch = ch;
    newnode_ptr -> occurs = 0;
    newnode_ptr -> next = NULL;
    return newnode_ptr;
}
/*code*/
void letters(char name[50], ListofChar *lst_ptr) {

    int i;
    Char *temp=NULL;
    Char *p=NULL;
    for(i=0;name[i]!='\0';i++){
        createnode(name[i]);
    }

    return;
}

void report(ListofChar chars) {
    while(chars!=NULL){
        printf("%c",chars->ch);
        chars=chars->next;
}
return;
}

1 Ответ

1 голос
/ 13 мая 2019

Для вывода "Hel" это примерно тот список, который вы хотите создать:

+------+
|  H   |
+------+
| next |-+
+------+ |
   ------|
   |
   V
+------+
|  E   |
+------+
| next |-+
+------+ |
   ------|
   |
   V
+------+
|  L   |
+------+
| NULL |
+------+

, и это то, что ваш код создает:

+------+
|  H   |
+------+
| NULL |
+------+

+------+
|  E   |
+------+
| NULL |
+------+

+------+
|  L   |
+------+
| NULL |
+------+

Вам нужно связатьэлементы вашего списка вместе.С этим рисунком и поиском в Google вы сможете написать свою программу.

...