https://acm.ecnu.edu.cn/problem/2974/
给定一行由若干英文单词和空格组成的字符串,统计该字符串中有效单词的个数,单词与单词之间用一个空格来分隔,其中的 the
,a
,an
,of
,for
及 and
被忽略,不作统计。
输入格式
第 1 行:整数n (1≤n≤10) 为问题数。
第 2 ∽ n+1 行:每一个问题中一行由若干英文单词和空格组成的字符串,字符串的长度不超过 100 个字符。
输出格式
对于每个问题,输出一行问题的编号(0 开始编号,格式:case #0:
等),然后在新的一行中输出统计得到的单词个数,行末尾输出一个换行符。
样例
input
2 This is a sample Love is a lamp while friendship is the shadow
output
case #0: 3 case #1: 7
用这道题复习一下stringstream,用stringstream来分隔字符串
ss.str("");为清空操作
ss<<(string); 为输入string到ss中
ss>>T; 为从ss中读取T类型数据
getlinr(ss,string,',') 读取以','为分隔符的字符串
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
int t;
cin>>t;
getchar(); //吃掉t后的换行符,防止其干扰s的读入
for(int i=0;i<t;i++){
string s,t;
getline(cin,s); //按行读入字符串
for(int i=0;i<s.length();i++)
s[i]=tolower(s[i]); //题目陷阱,先把s转为小写
stringstream ss;
ss<<s; //用stringstream流储存s
ll ans=0;
while(ss>>t){ //从ss中读取t
if(t=="a"||t=="an"||t=="the"||t=="of"||t=="for"||t=="and")continue;
ans++;
}
printf("case #%d:\n",i);
cout<<ans<<endl;
}
return 0;
}