首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

UVA 123 - Searching Quickly(分开单词)

2013-01-26 
UVA 123 - Searching Quickly(分离单词)这道题还是有点麻烦的。如果把每个句子存为一个字符串,则在最后分离

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;}


 

热点排行