单词个数
描述
给定若干行字符单词,每行有若干个单词,要求统计每行有多少个不同的单词。
输入
标准输入,包括若干行,第一行为用例的个数n,接下来的n行,每行开头为一个整数k,表示该行单词个数,接下来为k个单词,单词之间用一个空格隔开,可以假定不包含标点及非字符情况,大小写可忽略,如“I”和“i”可以认为是同一个单词,同时每行单词个数不超过80个,每个单词长度不超过20。
输出
标准输出,每个用例用一行输出不同单词的个数。
样例输入
样例输出
既然你选择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; }
那些输入输出你自己处理下吧。
非常感谢。
看上去好像是ACM。。。。。。
循环数组,循环判断
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++要复杂点。
非常感谢你的回答,我没有学c#,我只学了c++.
@fengyu123: 可是你这个题是Java的啊。C++的话,就需要分割为单词数组,然后排序,然后求唯一数量。
@幻天芒: 谢谢 ,我自己再想想
@fengyu123: 加油!
1、读取一行数据
2、用空格分隔字符串,(一般结果为字符串数组)然后去掉第一个,即开头的数字
3、将其全部转化为小写或大写,然后剔除重复的单词
4、计算单词的个数(也就是字符串数组的长度)
5、输出结果