Spperman


私信TA

用户名:fan

访问量:63113

签 名:

优秀的程序员是没有女朋友的...

等  级
排  名 64
经  验 10136
参赛次数 0
文章发表 66
年  龄 19
在职情况 学生
学  校 河南师范大学
专  业 物联网

  自我简介:

单身是因为——太优秀了...

TA的其他文章

解题思路:


起初思路是建造一个二维数组;char a [] [];用于存放字符串,不过当时不知道怎么退出while(gets(str[i]))循环

题解中Wu师兄给出结构体,突然发现可以用结构体数组代替二维数组;

(退出循环再回车后 ctrl+z 回车 就可以了)

所以就用结构体的方法解答本题

 

我想拉一下算法,

1.首先容易想到的思路就是先把单词全部输入,存入结构体数组中,


2.然后进行比较(循环中);(长度与内容的区别):不过后来用strcmp函数后感觉这个很直接就可以区分单词;不需要分支判断长度与内容;


3.如果遇到相同的单词直接赋值为0就好啦(本来想法二维数组赋值成0,遇见continue就ok),不过这里结构体中的flag=0;可以发挥同样的作用!(如果把相同的删除,要涉及顺序表(如数组)的前移问题,增加算法的时间复杂度,耗时,所以整体赋值为0,用0当做标记!来标记相同的单词或者理解为重复被删除的单词);


4.最后输出不为0的结果ok喽!





注意事项:


看我的注释吧!

参考代码:


#include<stdio.h>
#include<string.h>
struct T
{
    int flag;
    char str[50];
};

int main()
{
    int n,i=0,j,sum=0;
    char str[50];
    struct T a[105];
   while(scanf("%s",str)!=EOF)         //gets 输入还要区分空格,不如用scanf与空格结束们这个单词的输入
   {                                                    // ctrl + z +回车 结束循环


       //a[i++].str[105]=str[50];              //只是单个字符不是字符串........
       strcpy(a[i].str,str);                       //c 语言没有字符串直接复制,所以用strcpy函数复制
       a[i].flag=1;                                  //所有flag初值为1 用于标记
       //puts(a[i].str);
       i++;
   }
   n=i;
   //printf("%d",n);
   for(i=0;i<n;i++)
   {
       for(j=i+1;j<n;j++)
       {
           if(strcmp(a[i].str,a[j].str)==0)                //用于比较,相等则为0
           {
               a[j].flag=0;
               // printf("**@@@@@@@@@@@@@@@**\n");
           }
       }
   }
   for(i=0;i<n;i++)
    {
        if(a[i].flag==1)
        {
            sum+=1;
           // puts(a[i].str);
        }
     }
    // printf("****\n");
     printf("%d",sum);
     //printf("\n****\n");
    return 0;
}


 

0.0分

0 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区