首页 新闻 会员 周边 捐助

统计不同单词数

0
悬赏园豆:5 [已解决问题] 解决于 2013-09-17 12:22

单词个数

时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte
总提交:89            测试通过:71

描述

给定若干行字符单词,每行有若干个单词,要求统计每行有多少个不同的单词。

输入

标准输入,包括若干行,第一行为用例的个数n,接下来的n行,每行开头为一个整数k,表示该行单词个数,接下来为k个单词,单词之间用一个空格隔开,可以假定不包含标点及非字符情况,大小写可忽略,如“I”和“i”可以认为是同一个单词,同时每行单词个数不超过80个,每个单词长度不超过20。

输出

标准输出,每个用例用一行输出不同单词的个数。

样例输入

2
10 I am teacher you are teacher i am not student
7 You you my My old YOU Your

 

样例输出

7
4
 
没有思路求大神帮忙。
lzyer的主页 lzyer | 初学一级 | 园豆:130
提问于:2013-09-12 20:55
< >
分享
最佳答案
1

既然你选择C++,那我就用STL实现下。如果用C会比较复杂的。

#include <iostream>
#include <set>
#include <string>
#include <functional>
#include <algorithm>
#include <cctype>

using namespace std;

int getWordCount(const string& str) {
    set<string> setstr;
    size_t start = 0;
    size_t end = 0;
    cout << "n=" << str.length() << endl;
    while (true) {
        end = str.find(" ",start);
        size_t n = end - start;
        string s = str.substr(start,n);
        cout << "s=" << s << endl;
        transform(s.begin(), s.end(), s.begin(), ::toupper); // 转换字母为大写
        setstr.insert(s); // set 是stl自带的集合容器,可去除相同单词。
        start = end+1;
        if (end==string::npos) {
            break;
        }
    }
    return setstr.size();
}

int main(int argc, char *argv[]) {
    string str = "I am teacher you are teacher i am not student";
    int c = getWordCount(str);
    cout << "c=" << c << endl;
}

 

那些输入输出你自己处理下吧。

收获园豆:3
涵曦 | 初学一级 |园豆:65 | 2013-09-17 11:19

非常感谢。

lzyer | 园豆:130 (初学一级) | 2013-09-17 11:21
其他回答(3)
0

看上去好像是ACM。。。。。。

iEvent | 园豆:529 (小虾三级) | 2013-09-13 08:28

循环数组,循环判断

支持(0) 反对(0) iEvent | 园豆:529 (小虾三级) | 2013-09-13 08:32
1

C#非常好写,不过就起不到写算法的作用的。

public void TestC()
        {
            int count=Convert.ToInt32(Console.ReadLine());//获取数量
            var list=new List<string>();
            for(var i=0;i<count;i++)
            {
                list.Add(Console.ReadLine());
            }
            Stopwatch watch=new Stopwatch();
            watch.Start();
            foreach(var s in list)
            {
                Console.WriteLine(s.Split(' ').Distinct().Count()-1);
            }
            watch.Stop();
            Console.WriteLine(watch.Elapsed);
        }

自己改造,类似的。Java类似,C/C++要复杂点。

收获园豆:1
幻天芒 | 园豆:37207 (高人七级) | 2013-09-13 10:02

非常感谢你的回答,我没有学c#,我只学了c++.

支持(0) 反对(0) lzyer | 园豆:130 (初学一级) | 2013-09-13 11:37

@fengyu123: 可是你这个题是Java的啊。C++的话,就需要分割为单词数组,然后排序,然后求唯一数量。

支持(0) 反对(0) 幻天芒 | 园豆:37207 (高人七级) | 2013-09-13 12:10

@幻天芒: 谢谢 ,我自己再想想

支持(0) 反对(0) lzyer | 园豆:130 (初学一级) | 2013-09-13 17:24

@fengyu123: 加油!

支持(0) 反对(0) 幻天芒 | 园豆:37207 (高人七级) | 2013-09-13 22:05
1

1、读取一行数据

2、用空格分隔字符串,(一般结果为字符串数组)然后去掉第一个,即开头的数字

3、将其全部转化为小写或大写,然后剔除重复的单词

4、计算单词的个数(也就是字符串数组的长度)

5、输出结果

收获园豆:1
薛遗山 | 园豆:106 (初学一级) | 2013-09-16 09:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册