c - 查找段落中单个字数的程序

标签 c string pointers memory-management data-structures

这是一个程序,用于计算变量 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;
}

最佳答案

以下是错误的:

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

gets 函数中使用未初始化的指针 c 会导致未定义的行为。您需要为 c 分配内存,它比您希望存储的最大字符数大一。

intm 也是如此。

此外,使用 fgets代替 gets

关于c - 查找段落中单个字数的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4865851/

相关文章:

c - 为什么我最后得到一个零,我怎样才能在不反转数组的情况下做同样的事情?

java - 如何使用 Spring Boot 摄取 Json 字符串数组

c - 取消引用指向不完整类型的指针

冲突类型错误和整数指针,没有强制转换警告 C

c - 免费使用问题

c - 小数部分不太小的浮点不精确结果 - 有办法克服吗?

c - 中位数和众数不正确

c++ - 是否允许枚举具有未列出的值?

c# - 在 JavaScript 中,什么等效于 C# 的 @ 语言功能,用于忽略字符串文字中的转义字符?

java - 如何将 "\n "替换为新行?