3 Stimmen

Programm zur Ermittlung der Anzahl einzelner Wörter in einem Absatz

Dieses Programm zählt die Anzahl der einzelnen Wörter in einer Variablen para als Eingabe.

Ich habe dies mit einer verknüpften Liste versucht.

Hier variabel complete ist ein Array, das wie ein Hash-Code wirkt und speichert alle Alphabete und ich bin Verknüpfung neues Wort als pro der Hash und wenn es das gleiche Wort dann ich bin Erhöhung der Anzahl. Dies ist die Logik, der ich gefolgt bin.

Aber die Sache ist, dass es im Programm nicht in einen bestimmten Teil des Codes geht, der geschrieben wurde, um wiederholte Wörter zu nehmen, und es erhöht die Anzahl nicht.

Dies ist mein Code kann mir jemand dabei helfen.

#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;
}

2voto

codaddict Punkte 426877

Das Folgende ist falsch:

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

Verwendung eines nicht-initialisierten Zeigers c in gets Funktion führt zu einem undefinierten Verhalten. Sie müssen Speicher zuweisen für c die um eins größer ist als die maximale Anzahl der Zeichen, die Sie speichern möchten.

Das Gleiche gilt für intm .

Verwenden Sie außerdem fgets anstelle von gets

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X