программа для поиска индивидуального количества слов в параграфе - PullRequest
3 голосов
/ 01 февраля 2011

Это программа для подсчета количества слов в переменной 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;
}

1 Ответ

2 голосов
/ 01 февраля 2011

неверно следующее:

char *c;
...
gets(c);

Использование неинициализированного указателя c в функции gets приводит к неопределенному поведению. Вам необходимо выделить память для c, что на единицу превышает максимальное количество символов, которое вы хотите сохранить.

То же самое имеет место с intm.

Также используйте fgets вместо gets

...