P5015 [NOIP2018 普及组] 标题统计(洛谷)
本文最后更新于 482 天前,其中的信息可能已经有所发展或是发生改变。

补充一点小知识点

1、string的作用
string就是字符串的意思,是c++用来代替char数组的数据结构。里面封装了一些常用的方法,方便我们地对其进行一些操作,而且string的空间大小是动态变化的,大大减小了不必要的花销

2、string常用的输入方法
(1)cin输入,遇到空格停止输入

#include<iostream>//c++标准头文件,可以使用cout,cin等标准编译用法
using namespace std;//命名空间,防止重名给程序带来各种隐患,使用cin,cout,map,set,vector,queue时都要使用
int main(){
	string s1,s2;//定义字符串s1、s2 
	cin>>s1;//输入一个字符串给s1 
	cin>>s2;//输入一个字符串给s2 
	cout<<"s1得到的值是: "<<s1<<endl;
	cout<<"s2得到的值是: "<<s2<<endl;
} 

输入

hello world!

输出

s1得到的值是: hello
s2得到的值是: world!

(2)getline 输入,遇到换行会停止

#include<iostream>//c++标准头文件,可以使用cout,cin等标准编译用法
using namespace std;//命名空间,防止重名给程序带来各种隐患,使用cin,cout,map,set,vector,queue时都要使用
int main(){
	string s1,s2;//定义字符串s1、s2
	getline(cin,s1);//输入一行字符串给s1 
	getline(cin,s2);//输入一行字符串给s2 
	cout<<"s1得到的值是: "<<s1<<endl;
	cout<<"s2得到的值是: "<<s2<<endl;
} 

输入

hello world!
happy every day!

输出

s1得到的值是: hello world!
s2得到的值是: happy every day!

值得注意的是:
cin输入会自动吃点前置换行和空格,即cin输入得到的不可能是空串。而getline不会吃掉换行符号,可能会使得输入出现意料之外的错误。

#include<iostream>//c++标准头文件,可以使用cout,cin等标准编译用法
using namespace std;//命名空间,防止重名给程序带来各种隐患,使用cin,cout,map,set,vector,queue时都要使用
int main(){
	string s1,s2,s3;//定义字符串s1、s2、s3
	cin>>s1; //输入一个字符串给s1 
	getline(cin,s2);//输入一行字符串给s2 
	getline(cin,s3);//输入一行字符串给s3 
	cout<<"s1得到的值是: "<<s1<<endl;
//	判断s2是不是空串 
	if(s2==""){
		cout<<"s2是空串" <<endl; 
	} else{
		cout<<"s2得到的值是: "<<s2<<endl;
	}
	cout<<"s3得到的值是: "<<s3<<endl;
} 

输入

hi!
hello world!

输出

s1得到的值是: hi!
s2是空串
s3得到的值是: hello world!

解决的办法是多写一个getline,或者getchar()来达到吃掉多余的换行符字符:

#include<iostream>//c++标准头文件,可以使用cout,cin等标准编译用法
using namespace std;//命名空间,防止重名给程序带来各种隐患,使用cin,cout,map,set,vector,queue时都要使用
int main(){
	string s1,s2,s3;//定义字符串s1、s2、s3
	cin>>s1; //输入一个字符串给s1 
	getchar();//吃掉多余的换行符 
	getline(cin,s2);//输入一行字符串给s2 
	getline(cin,s3);//输入一行字符串给s3 
	cout<<"s1得到的值是: "<<s1<<endl;
//	判断s2是不是空串 
	if(s2==""){
		cout<<"s2是空串" <<endl; 
	} else{
		cout<<"s2得到的值是: "<<s2<<endl;
	}
	cout<<"s3得到的值是: "<<s3<<endl;
} 

输入

hi!
hello world!
happy every day!

输出

s1得到的值是: hi!
s2得到的值是: hello world!
s3得到的值是: happy every day!

另外要补充的是使用string时如何读取字符串长度

C++中获取string字符串长度的方法主要有3种:

  • 使用length()成员方法获取;
  • 使用size()成员方法获取;
  • 使用strlen()函数获取。

1.使用length()成员方法进行获取

string str = "abcde";
int len = str.length();

2.使用size()成员方法进行获取

string str = "abcde";
int len = str.size();

3.使用strlen()函数获取

string str = "abcde";
int len = strlen(str.c_str());

【注意】使用strlen()获取string字符串长度时,首先需要使用c_str()把string转换成char*。

题目描述

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

输入格式

输入文件只有一行,一个字符串 ss

输出格式

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

输入输出样例

输入

234 

输出

3

输入

Ca 45 

输出

4

说明/提示

样例 1 说明

标题中共有 3 个字符,这 3 个字符都是数字字符。

样例 2 说明

标题中共有 5 个字符,包括 1 个大写英文字母, 1 个小写英文字母和 2 个数字字符, 还有 1 个空格。由于空格不计入结果中,故标题的有效字符数为 4 个。

ac代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
	string a;
	int ans=0;
	getline(cin,a);
	int b=a.length();
	for(int i=0;i<b;i++)
	{
		if(a[i]!=' '&&a[i]!='\n') ans++;
	}
	cout<<ans;
	return 0;
}

补充完小知识点之后这个题就很简单了

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇