这是我第一次在StackOverflow中询问某些内容,通常我会在这里找到我的问题。
我有这个代码需要打印给定单词中每个字符出现的次数。我被分配仅更改函数report()
和letters()
中的代码。这就是我在过去几个小时里尝试和搜索的结果。由于没有以正确的方式释放或访问内存,我感觉程序无法运行。
另外,我对ListofChar chars
和ListofChar lst_ptr
指针到底指向的确切位置感到有些困惑。
#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 current = lst_ptr ;
int i=0 , j=0 ;
for( i= 0 ; i < 50 ; i++){
for( j = 0 ; j < strlen(name) ; j++){
if(current->ch == name[i]){
current->occurs++;
break; }
else if ( current-> ch == '\0' ){
current-> ch = name[i];
current-> occurs ++;
break; }
}
}
return;
}
void report(ListofChar chars) {
while((*chars).ch != '\0' )
printf("%c %d \n",(*chars).ch,(*chars).occurs);
return;
}