zoukankan      html  css  js  c++  java
  • UVA 123 Searching Quickly(分离单词)

            这道题还是有点麻烦的。如果把每个句子存为一个字符串,则在最后分离单词的时候会很麻烦。所以,我用一个结构体来作为一句话,把每句话中的单词单独储存,则最后处理的时候会方便很多。

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    struct ss {
        int x, y;
        char word[20][50];
        char key[50];
    }stmp[250], s[250];
    
    char ig[55][15];        // 被忽略的词
    int ign = 0, sn = 0;    // 被忽略词数量和title数量
    
    // 将字符串大写转小写
    void UTL(char str[]) {
        int len = strlen(str);
    
        for (int i=0; i<len; i++)
            if (str[i]>='A' && str[i] <= 'Z') {
                str[i] += ('a'-'A');
            }
    }
    // 将字符串小写转大写
    void LTU(char str[]) {
        int len = strlen(str);
    
        for (int i=0; i<len; i++)
            if (str[i]>='a' && str[i] <= 'z') {
                str[i] += ('A'-'a');
            }
    }
    
    // 判断是否为被忽略词
    bool judge(char str[]) {
        for (int i=0; i<ign; i++) {
            if (0 == strcmp(str, ig[i]))
                return false;
        }
        return true;
    }
    
    // 快排比较函数,如果两个字符串相等,就比较它们的优先级
    int cmp(const void *_a, const void *_b) {
        struct ss *a = (struct ss*)_a;
        struct ss *b = (struct ss*)_b;
        if (strcmp(a->key, b->key) != 0)
            return strcmp(a->key, b->key);
        return a->x - b->x;
    }
    
    int main() {
    
        // 下面两个while 用于输入操作
        while (scanf("%s", ig[ign])) {
            if (':' == ig[ign][0])
                break;
            ign++;
        }
        getchar();
    
        char str[50];
        while (scanf("%s", str) != EOF) {
            char ch = getchar();
    
            // 先将每个单词转为小写
            UTL(str);
    
            strcpy(stmp[sn].word[stmp[sn].y], str);
            stmp[sn].y++;           // 记录每句话单词的个数
    
            if ('\n' == ch) {
                stmp[sn].x = sn;    // 记录每句话的优先级
                sn++;
            }
        }
    
        // 下面对每句话的每个单词进行处理
        int num = 0;
        for (int i=0; i<sn; i++) {
            for (int j=0; j<stmp[i].y; j++) {   // 现在对每个单词进行处理
                if (judge(stmp[i].word[j])) {
                    s[num] = stmp[i];
                    LTU(s[num].word[j]);
                    strcpy(s[num].key, s[num].word[j]);
                    num++;
                }
            }
        }
    
        // 排序并输出
        qsort(s, num, sizeof (s[0]), cmp);
        for (int i=0; i<num; i++) {
            int j;
            for (j=0; j<s[i].y-1; j++)
                printf("%s ", s[i].word[j]);
            printf("%s\n", s[i].word[j]);
        }
    
        return 0;
    }
    


     

  • 相关阅读:
    Linux命令之vi
    CentOS7 查看IP
    Linux下mysql的命令
    @RequestMapping注解的参数说明
    springboot处理不同域的前端请求
    vue-cli4 取消关闭eslint 校验代码
    springmvc请求乱码
    访问静态资源报404错误
    eclipse创建Maven项目时pom.xml报错
    spring中的xml配置文件里报错
  • 原文地址:https://www.cnblogs.com/zcube/p/4194545.html
Copyright © 2011-2022 走看看