Я работал над этим кодом уже пару дней, и вот к чему я пришел (я спрашивал здесь раньше). Точка кода должна напечатать количество вхождений каждой буквы на данной строке, изменяя только letters()
и report()
.
Я добавил printf
в letters()
, чтобы увидеть, что происходит. Я не совсем уверен, что в функциях letters()
необходим первый цикл, но он печатает всю введенную строку. Кроме того, если я не поместил первый цикл в letters()
, то в report()
current будет NULL
(почему ???). Второй цикл в letters()
печатает только последнюю букву введенной строки (опять почему?). И report()
снова печатает только последнюю букву строки, а current->occurences
печатает случайное 6-значное число (вероятно, адрес электронной почты?), Также отчеты продолжаются вечно, что означает, что ток никогда не становится NULL
??? , Я работал над этим в течение нескольких дней, и я не могу понять, почему второй цикл на letters()
и report()
не будет работать, мне они кажутся правильными. Любая помощь приветствуется ...
#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;
}
void letters(char name[50],ListofChar* lst_ptr){
ListofChar newnode ;
newnode =(Char*)malloc(sizeof(Char));
if(!newnode){printf("adinamia mnimis");}
int i,j;
for( i = 0 ; i < strlen(name) ; i++){
newnode->ch = name[i] ;
printf("Look: %c\n",newnode->ch);
newnode->next = *lst_ptr ;
*lst_ptr = newnode ;
}
for( i = 0 ; i < 50 ; i++){
for( j = 0 ; j < strlen(name) ; j++){
if (newnode->ch == name[i]){
newnode->occurs++;
printf("uhm : %c\n",newnode->ch) ;
newnode = newnode->next;
break;
}
printf("hey : %c\n",newnode->ch);
}
}
}
void report(ListofChar chars) {
ListofChar current ;
current = chars ;
printf("the occurences of each letter are:\n");
while(current != NULL){
printf("%c : %d\n", current->ch,current->occurs );
current = current->next ;
}
if(current==NULL)printf("fail");
return;
}