「已注销」 2022-02-20 08:19 采纳率: 66.7%
浏览 174
已结题

应该没人能用c语言简化吧

我用#CSDN#这个app发现了有技术含量的博客,小伙伴们求同去《喵喵在开发一个新式的社交网络,现在她想要写一个模块来处理文本并计算其中不同标签的数量。》, 一起来围观吧 https://blog.csdn.net/qq_57230742/article/details/122809821?utm_source=app&app_version=5.0.1&code=app_1562916241&uLinkId=usr1mkqgl919blen

  • 写回答

4条回答 默认 最新

  • qzjhjxj 2022-02-20 19:40
    关注

    供参考:

    #include <stdio.h>
    #include <ctype.h>
    #include <stdlib.h>
    #include <string.h>
    typedef struct node
    {
        char c[30];
        int  count;
        struct node *next;
    }node,*link;
    
    node *firstWord(node *head,char word[])//判断单词是不是第一次出现
    {
        node *p=head;
        while(p->next != NULL)
        {
            if(strcmp(p->next->c, word) == 0)
               return p->next;
            p=p->next;
        }
        return NULL;
    }
    
    void print(node *p)//输出单词和次数
    {
        node *q=p;
        int  cnt_word=0;
        while(q->next){q = q->next;cnt_word++;}
        printf("%d\n",cnt_word);
        while(p->next != NULL)
        {
            printf("%s %d\n", p->next->c,p->next->count);
            q=p;
            p=p->next;
            free(q);
        }
        free(p);
    }
    int main()
    {
        char str[1024],word[30]={0};
        node *head,*p,*q,*t;
        int i,j=0,tag=1,flg=1;
        head=(link)malloc(sizeof(node));
        head->next=NULL;
        p=head;
        gets(str);
        while(flg)
        {
            switch(tag){
            case 1:
                  i=0;
                  if(str[j] == '#')
                      word[i++]=str[j++] ,tag = 2;
                  else
                      tag = 3;
                  break;
            case 2:
                  if(isalpha(str[j]))
                      word[i++]=str[j++];
                  else if(str[j] == '#')
                      i = 0, tag = 3;
                  else
                      tag = 3;
                  break;
            case 3:
                  if(str[j] == ' ' || str[j] == '\0')
                  {
                      if(i > 1){
                         word[i]='\0';//加入结束符
                         t=firstWord(head,word);
                         if(t == NULL)//第一次出现的单词
                         {
                             q=(link)malloc(sizeof(node));
                             q->next=NULL;
                             q->count=1;
                             strcpy(q->c,word);
                             p->next=q;
                             p=q;
                         }
                         else
                             t->count++;
                      }
                      tag = 1;
                  }
                  if(str[j] == '\0') flg=0;
                  j++;
                  break;
            }
        }
        print(head);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月1日
  • 已采纳回答 2月21日
  • 创建了问题 2月20日

悬赏问题

  • ¥15 关于#vue.js#的问题:word excel和ppt预览问题语言-javascript)
  • ¥15 Apache显示系统错误3该如何解决?
  • ¥30 uniapp小程序苹果手机加载gif图片不显示动效?
  • ¥20 js怎么实现跨域问题
  • ¥15 C++dll二次开发,C#调用
  • ¥15 请教,如何使用C#加载本地摄像头进行逐帧推流
  • ¥15 Python easyocr无法顺利执行,如何解决?
  • ¥15 为什么会突然npm err!啊
  • ¥15 java服务连接es读取列表数据,服务连接本地es获取数据时的速度很快,但是换成远端的es就会非常慢,这是为什么呢
  • ¥15 vxworks交叉编译gcc报错error: missing binary operator before token "("