目录
例题2:P5015 [NOIP2018 普及组] 标题统计 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
关于在例题1及例题2中所使用的size()与length()的区别
在练习的过程中多次遇到输入带空格的字符串,在采用cin进行输入时发现cin输入会在空格时就结束,因此我们需要用别的手段来输入带空格的字符串
1.gets()(不推荐使用)
#include<iostream>
using namespace std;
char a[100];
int main()
{
gets(a);
cout << a;
return 0;
}
注:vs2022不支持gets函数,gets()函数在标准c++中已被废弃,并且在大多数编译器中已经不再支持使用。这是因为gets()函数存在缓冲区溢出的安全风险,可能导致程序崩溃或受到恶意攻击。相反,可以使用getline()函数来代替gets(),它更安全且功能更强大。getline()可以读取一行输入。并将其存储到string对象中
2.基于string的getline()
#include<iostream>
using namespace std;
#include<string>
int main()
{
string a;
getline(cin, a);
cout << a;
return 0;
}
接收一个字符串,可以接收空格并输出
3.cin.getline()或cin.get()
#include<iostream>
using namespace std;
#include<string>
int main()
{
char a[10];
cin.getline(a,5);//接收5个字符
cout << a;
return 0;
}
cin.getline()实际上有三个参数,cin.getline(接收字符串的变量,接收字符个数,结束字符),当第三个参数省略时,系统会默认为'\0'
//cin.get()与cin.getline()用法一致
区别cin.getline()和getline()
这是两个不一样的函数,cin.getline()属于istream流,而getline()属于string流
cin.getline()不需要引头文件,getline()头文件为#include<string>
例题
例题1:字符逆序__牛客网 (nowcoder.com)
题解
#include<iostream>
using namespace std;
#include<string>
void my_reverse(string& a, int ret)
{
int left = 0;
int right = ret-1;
while (left < right)
{
swap(a[left],a[right]);
left++;
right--;
}
}
string a;
int main()
{
getline(cin,a);
int ret = a.length();
my_reverse(a, ret);
cout<<a;
return 0;
}
//可以使用库函数更简便
#include<iostream>
using namespace std;
#include<string>
#include<algorithm>
string a;
int main()
{
getline(cin,a);
int ret = a.length();
reverse(a.begin(),a.end());
cout<<a;
return 0;
}
例题2:P5015 [NOIP2018 普及组] 标题统计 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
题解
#include<iostream>
using namespace std;
#include<string>
int main()
{
string a;
int count = 0;
getline(cin,a);
for (int i = 0; i < a.size(); i++)
if ((a[i] >= 'A' && a[i] <= 'Z') || (a[i] >= 'a' && a[i] <= 'z') || (a[i] >= '0' && a[i] <= '9'))
count++;
cout << count;
return 0;
}
关于如何求字符串长度
在c++中常用length()或size()成员函数来获取string对象的长度,而在c中常用strlen()函数来计算长度
关于在例题1及例题2中所使用的size()与length()的区别
length()仅适用于字符串,size()适用于字符串和容器