洛谷P5015$\lceil$NOIP2018普及组$\rfloor$题解

P5015标题统计

原$NOIP2018\;pj\;T_1$

AC记录qwq

题面描述

凯凯刚写了一篇美妙的作文,请问这篇作文的标题中有多少个字符? 注意:标题中可能包含大、小写英文字母、数字字符、空格和换行符。统计标题字 符数时,空格和换行符不计算在内。

输入输出格式

输入格式

输入文件只有一行,一个字符串$s$。

输出格式

输出文件只有一行,包含一个整数,即作文标题的字符数(不含空格和换行符)。

INPUT & OUTPUT‘s examples

Input’s example #1

1
234

Output’s example #1

1
3

Input’s example #2

1
Ca 64

Output’s example #2

1
4

说明

【输入输出样例 1 说明】
标题中共有 3 个字符,这 3 个字符都是数字字符。
【输入输出样例 2 说明】 标题中共有
5个字符,包括1个大写英文字母, 1个小写英文字母和2个数字字符, 还有 1个空格。由于空格不计入结果中,故标题的有效字符数为4个。
【数据规模与约定】
规定$|s|$表示字符串的长度(即字符串中的字符和空格数)。
对于40%的数据,$1 \leq |s| \leq 5$保证输入为数字字符及行末换行符。
对于80%的数据,$1 \leq |s| \leq 5$输入只可能包含大、小写英文字母、数字字符及行末换行符。
对于100%的数据,$1 \leq |s| \leq 5$输入可能包含大、小写英文字母、数字字符、空格和行末换行符。

分析

显然这是一道十分适合作为普及组同学找信心的一道题。

只需要对于一个含空格的字符串进行判断,只要不是空格,那么答案就$+1$。

但本题有好多种做法,这里只说两种,一种是$Herself32$本人的做法,另一种是本宿舍其他成员的解法。

First method

开一个字符类型的变量,利用while(cin>>s)对于每一次读入进行判断,从而得出答案

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/* Headers */
#include<iostream>
using namespace std;
namespace FastIO{
inline int getint(){
int res=0,flag=1;
char word=getchar();
while(!isdigit(word)){
if(ch=='-')flag=-1;
word=getchar();
}
while(isdigit(word)){
s=s*10+word-'0';
word=getchar();
}
return res*flag;
}
inline void putint(int target){
if(target<0){
target=-target;
putchar('-');
}
if(target>=10) basic_putint(target/10);
putchar(target%10+'0');
}
inline void new_putint(int x,char external){
basic_putint(x);
putchar(external);
}
}
using namespace FastIO;
/* definitions */
char s;
int cnt;
/* functions */
int main(){
while(cin>>s){
if(s!='\n'&&s!=' '&&s!='\r')cnt++;
}
cout<<cnt<<endl;
return 0;
}

Second method

getline字符串读入,再用for循环判断。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/* Headers */
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
namespace FastIO{
inline int getint(){
int res=0,flag=1;
char word=getchar();
while(!isdigit(word)){
if(ch=='-')flag=-1;
word=getchar();
}
while(isdigit(word)){
s=s*10+word-'0';
word=getchar();
}
return res*flag;
}
inline void putint(int target){
if(target<0){
target=-target;
putchar('-');
}
if(target>=10) basic_putint(target/10);
putchar(target%10+'0');
}
inline void new_putint(int x,char external){
basic_putint(x);
putchar(external);
}
}
using namespace FastIO;
/* definitions */
string s;
int cnt;
/* functions */

int main(){
getline(cin,s);
for(int i=0;i<s.size();i++){
if(s[i]!=' '&&s[i]!='\n'&&s[i]!='\r') cnt++;
}
cout<<cnt<<endl;
return 0;
}

你们想象一下,$Herself32$被一群会用getline的dalao吊着打的情形。

THE END