这是一个计算变量para
中单个字数作为输入的程序。
我通过链接列表尝试了这个。
这里变量complete
是一个数组,其作用类似于哈希码并存储所有字母表,我按照哈希链接新单词,如果有相同的单词则我增加计数。这是我遵循的逻辑。
但事情是在程序中,它没有进入代码的特定部分,这些部分被编写为重复单词并且不会增加计数。
这是我的代码,任何人都可以帮助我。
#include<stdio.h>
#include<conio.h>
#include<string.h>
#define NULL 0
struct wordcount
{
char *s;
int count;
struct wordcount *next;
};
struct checkletter
{
char alph;
struct wordcount *next;
};
struct wordcount * create(char *);
main()
{
char *c,*s1,*intm;
char hastlet;
int hash[26],len,i,k=0,r,j,m=0,t,flag=0;
struct checkletter complete[26];
struct wordcount *node;
clrscr();
for(r=0;r<=25;r++)
{ complete[r].alph=r+97;
complete[r].next=NULL;
}
for(r=0;r<=25;r++)
{
printf("%c",complete[r].alph);
}
printf("\n");
printf("Enter the para :");
gets(c);
len=strlen(c);
//arranging the words and putting them with count
for(i=0;i<len;i++)
{ k=0;
intm='\0';
if(c[i]==' ')
{ for(j=m;j<i;j++)
{
intm[k]=c[j];
k++;
}
intm[k]='\0';
strcpy(s1,intm);
m=k;
m++;
hastlet=s1[0];
for(t=0;t<26;t++)
{
if(complete[t].alph==hastlet)
{
node=complete[t].next;
if(node==NULL)
{
complete[t].next=create(s1);
node=complete[t].next;
break;
}
else
{ while(!strcmp(node->s,s1))
{
node=node->next;
if(node->next==NULL)
{ flag++;
break;
}
}
if(!strcmp(node->s,s1))
(node->count)+=1;
if(flag)
{ node->next=create(s1);
}
} break;
}
}
}
}
//displaying the word that are counted
for(i=0;i<26;i++)
{ node=complete[i].next;
if(complete[i].next!=NULL)
while(1)
{ printf("%s---%d",node->s,node->count);
if(node->next==NULL)
break;
}
}
getch();
}
struct wordcount * create(char *y)
{
struct wordcount *newnode;
newnode->s=y;
newnode->count=0;
newnode->next=NULL;
return newnode;
}
答案 0 :(得分:2)
以下内容不正确:
char *c;
...
gets(c);
在c
函数中使用未初始化的指针gets
会导致未定义的行为。您需要为c
分配一个比您希望存储的最大字符数大1的内存。
intm
的情况也一样。
另外,使用fgets代替gets