#2072
第一个坑,没看清楚题意,以为单纯统计单词个数,实际上是统计不同的单词个数
第二个坑,认识到统计不同单词个数之后,可以使用set集合的互异性解决单词不同的统计问题,但是如果读入的测试数据中包含多个空格这个时候不应该将多个空格认为单词,应该忽略所有空格,仅以小写字母为判断对象,把空格认为判断对象的时候踩坑了。
这道题还考察字符串的读取
getline()读取的时候会自动丢弃换行符,但是结尾的时候有结束标记,因此也可以正确统计。
读取的时候如果是字符数组的话可以用gets(s),如果读取的类型是string的话,可以使用getline(cin,s),
求数组长度的时候,一个是strlen(s),一个是s.size();
本题主要利用集合set的取集合大小以及集合插入方法,insert(),size()
AC代码
#include <iostream>
#include <cmath>
#include <cstring>
#include <string>
#include <set> //集合的头文件,利用集合的互异性
using namespace std;
int main() {
string s;
set<string> st;
while(getline(cin,s)){
if(s=="#"){
return 0;
}
string str="";
for(int i=0;i<s.size();i++){
int flag=0;
while(s[i]>='a' && s[i]<='z'){
str+=s[i];
i++;
flag++;
}
if(flag){
st.insert(str);
str="";
}
}
cout<<st.size()<<endl;
st.clear();
}
return 0;
}
读取的时候用gets()读取字符数组
#include <iostream>
#include <cmath>
#include <cstring>
#include <string>
#include <set> //集合的头文件,利用集合的互异性
using namespace std;
int main() {
char s[1010];
set<string> st;
while(gets(s)){
if(s[0]=='#'){
return 0;
}
string str="";
int len=strlen(s);
for(int i=0;i<len;i++){
int flag=0;
while(s[i]>='a' && s[i]<='z'){
str+=s[i];
i++;
flag++;
}
if(flag){
st.insert(str);
str="";
}
}
cout<<st.size()<<endl;
st.clear();
}
return 0;
}