查看: 929|回复: 1

[C/C++] 2001:单词统计

[复制链接]

1

技术

25

魅力

7

原创

管理员

Rank: 9Rank: 9Rank: 9

积分
11343
人气
297
分享
42

论坛元老优秀版主活跃会员最佳新人灌水之王

发表于 2021-10-29 13:39:34 | 显示全部楼层 |阅读模式
【题目描述】
小佳佳的英语课外阅读作业。

有一篇文章,共有n行,且每行只包含英文逗号及由大小写英文字母组成的单词,每个单词的字母个数不超过6个,每行至少有一个单词,但不超过200个字符。当我们忽略英文字母的大小写时,小佳佳想知道这篇文章里面含有多少个不同的英文单词。

例如,Word与worD是同一个单词,abcd、bacd、abcde是三个不同的单词。

【输入】
第一行,1个整数n,文章的行数;

接下来n行为文章的具体内容。

【输出】
整篇文章不同单词的个数。

【输入样例】
3
hello
word
Hello
【输出样例】
2
【提示】
输入样例2

3
hello,china
word
Hello
输出样例2

3
【数据范围】

对于60%的数据保证,1≤n≤100,每行只有一个单词,只含有小写英文字母。

对于另外20%的数据保证,1≤n≤200,每行有两个单词,单词之间只有一个逗号。

对于另外20%的数据保证,最多出现50000个单词,如某行有多个单词,单词之间有一个逗号。

【代码】
[C++] 纯文本查看 复制代码
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <map>
using namespace std;

int main() {
    int n, cnt = 0;
    scanf("%d", &n);
    map<string, bool> a;
    for (int i = 0; i < n; i++) {
        int flag = 0;
        char sz[205];
        scanf("%s", sz);
        do {
            if (flag != 0) {
                sz[flag] = ',';
                for (int j = 0; j < strlen(sz) - 1; j++) {
                    sz[j] = sz[j + flag + 1];
                }
                flag = 0;
            }
            for (int j = 0; j < strlen(sz); j++) {
                sz[j] = tolower(sz[j]);
                if (sz[j] == ',')
                    sz[j] = '\0', flag = j;
            }
            if (a.count(sz) == 0) {
                a[sz] = true;
                cnt++;
            }
        } while (flag != 0);
    }
    printf("%d", cnt);
}


评分

参与人数 1人气 +3 收起 理由
visaction + 3 赞一个!

查看全部评分

Just do it.

0

技术

5

魅力

0

原创

退休版主

Rank: 8Rank: 8

积分
3895
人气
219
分享
31

优秀版主

发表于 2021-10-30 19:50:07 | 显示全部楼层
辛苦了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表