zoukankan      html  css  js  c++  java
  • 进阶实验5-3.2 新浪微博热门话题 (30分)-字符串处理

     

    解题思路:总感觉题意不清晰,前前后后折腾无数次均无法AC,,后在网上陆续参考其他大神的文章才得以AC

    题意理解:

    1、一条微博中重复提到的话题只算1次

     2、And k more ...其中的K是指如果被提到最多的话题不唯一,则k=相同话题条数-1

    3、话题格式化处理:所有字母转换成小写字母,除数字和字母外,其它字符换成空格,多个空格只保留一个空格,话题首尾不能有空格

     4、话题输出首字母大写

    #include <stdio.h>
    #include <string.h>
    #define Max 1000000
    #define MaxLen 200
    typedef struct {
        char s[MaxLen];
        int all;
        int cnt;
        int flag;
    } Topic;
    Topic f[Max];
    int t=0;
    int IsChar(char c) {
        if((c>='0'&&c<='9')||(c>='a'&&c<='z')||(c>='A'&&c<='Z'))
            return 1;
        return 0;
    }
    void GetTopic(char s[],int tag) {
        int i=0,flag=0,j=0,cnt=0,k;
        char c[MaxLen];
        while(s[i]!='') {
            if(s[i]=='#'&&!flag) {
                flag=1;
                i++;
            }
            if(flag) {
                if(IsChar(s[i])) {
                    if(!j) {
                        if(s[i]>='a'&&s[i]<='z')
                            s[i]=s[i]-'a'+'A';
                    } else {
                        if(s[i]>='A'&&s[i]<='Z')
                            s[i]=s[i]-'A'+'a';
                    }
                    c[j++]=s[i];
                    cnt=0;
                } else {
                    if(s[i]!='#') {
                        s[i]=' ';
                        if(!cnt) {
                            if(s[i-1]!='#'&&s[i+1]!='#')
                                c[j++]=s[i];
                            cnt++;
                        }
                    } else {
                        flag=0;
                        c[j]='';
                        for(k=0; k<t; k++) {
                            if(!strcmp(f[k].s,c)) {
                                f[k].all++;
                                if(f[k].flag!=tag) {
                                    f[k].cnt++;
                                    f[k].flag=tag;
                                }
    
                                break;
                            }
                        }
                        if(k==t) {
                            strcpy(f[t].s,c);
                            f[t].all=1;
                            f[t].cnt=1;
                            f[t].flag=tag;
                            t++;
                        }
                        j=0;
                    }
                }
            }
            i++;
        }
    }
    char MIN[MaxLen];
    int count;
    int Find() {
        int i,max=0,pos=0;
        for(i=0; i<t; i++) {
            if(f[i].cnt>max) {
                max=f[i].all;
                strcpy(MIN,f[i].s);
                pos=i;
                count=1;
            }
            else if(f[i].cnt==max) {
                count++;
                if(strcmp(f[i].s,MIN)<0) {
                    strcpy(MIN,f[i].s);
                    pos=i;
                }
            }
        }
        return pos;
    }
    int main() {
        char s[MaxLen];
        int n,i;
        scanf("%d",&n);
        getchar();
        for(i=0; i<n; i++) {
            gets(s);
            GetTopic(s,i);
        }
        int pos=Find();
        printf("%s
    ",MIN);
        printf("%d
    ",f[pos].cnt);
        if(count-1>0)
        printf("And %d more ...",count-1);
        return 0;
    }
  • 相关阅读:
    stl(8)常见的算法
    stl(7)几种常见的迭代器
    stl(6)deque容器
    pre_exam_exercise1
    全为1时计算个数,出现0返回0
    COMP9021--7.18
    lecture 5 Basics of Map Algebra
    COMP9021--7.15
    Lecture 4补充
    COMP9021--7.4
  • 原文地址:https://www.cnblogs.com/snzhong/p/12582557.html
Copyright © 2011-2022 走看看