本文最后更新于 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;
}
补充完小知识点之后这个题就很简单了