单词个数
时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte
总提交:90 测试通过:72
目前还不知道这种方法,好像是 c++STL,留到自己知道后在写下注释。若有哪位知道求在下面写下
总提交:90 测试通过:72
描述
给定若干行字符单词,每行有若干个单词,要求统计每行有多少个不同的单词。
输入
标准输入,包括若干行,第一行为用例的个数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
10 I am teacher you are teacher i am not student
7 You you my My old YOU Your
样例输出
7
4
4
#include <iostream>
#include <set>
#include <vector>
#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;
while (true) {
end = str.find(" ",start);
size_t n = end - start;
string s = str.substr(start,n);
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 n,m;
cin>>n;
while(n--)
{
cin>>m;
cin.ignore();
getline(cin,str);
int c = getWordCount(str);
cout << c << endl;
}
return 0;
}
目前还不知道这种方法,好像是 c++STL,留到自己知道后在写下注释。若有哪位知道求在下面写下