[NOIP2018 普及组] 标题统计题解报告

· · 个人记录

(原分类:CSOI)

这个题目乍一看上去简单,但其实是有坑的……

正文:

首先,我们看这么一段话:

“注意:标题中可能包含大、小写英文字母、数字字符、空格和换行符。统计标题字符数时,空格和换行符不计算在内。”

这表明我们读入时需要读取一整行字符,可是,我们熟知的 cin 和 cout 只能读取到空白字符处,并以空白字符为截止的标记,怎么办呢?(要不是 OI 不能用 Python ,直接用 input() 就能读一整行)

答曰:cin.get() 和 cin.getline()。

cin.get()接受两个参数:第一个是待输入的字符数组(不是 string !),另一个是读取数据的最长长度。

至于 cin.getline() ,使用同上。但是 cin.getline() 丢弃换行符,而 cin.get() 则保留换行符。

例子:

char c[2005];
cin.get(c,2005);//或cin.getline(c,2005);

对于使用 string 的人,C++ 也提供了一种解决方法,即 getline() ,例如:

string str;
getline(cin,str);

于是,输入这个坑就解决了。

剩下的对于我们来说就很容易了。

代码:

#include<bits/stdc++.h>
using namespace std;
char c[225];
int main(){
    int t=0;
    cin.get(c,1000);//其实没必要这么长,我写的时候没看数据范围。
    for(int i=0;i<strlen(c);i++)
        if(c[i]!=' '&&c[i]!='\n') t++;
    cout<<t;
    return 0;
}