lqb日志03

一只小蒟蒻备考蓝桥杯的日志

文章目录

    • 笔记
      • map
        • 插入
        • 遍历
        • 查找
        • 删除关键字
        • size
      • 读入
        • cin
        • gets() & gets_s()
        • getline()
      • 获取字符串、字符数组长度
        • char数组
        • string
      • string的字符串拼接操作
        • string类型的随便加
        • ""类型处理后加
        • 拼接int类型
    • 刷题
    • 心得
    • 小结

笔记

map

参考 C++中map的用法总结

#include 

形式:
map<键,键值>mp;
以下以 mapmp; 为例

插入
mp['c']++;
遍历
for(auto& it:mp) {
	cout << it.first << " " << it.second << endl; // c 1
}
查找
auto it = mp.find('a');
if(it != mp.end()) {
	cout << "Find it!" << endl;
} else {
	cout << "Didn't find it..." << endl;
}
删除关键字

刪除了返回1,反之返回0

int flag = mp.erase('c');
cout << flag << endl; // 1
size
cout << mp.size() << endl; // 0

读入

参考 C++:cin、cin.getline()、getline()的用法

cin
  1. 接收一个数字/字符/字符串
  2. 遇到“空格”、“TAB”、“回车”就结束
gets() & gets_s()

参考 使用C语言gets函数和gets_s函数
gets()
可以无限读取,不会判断上限,以回车结束读取——不安全
C标准的最新修订版(2011年)已明确将该功能从其规范中删除
(所以说,不要用了吧~)
gets_s()
由于gets_s是Visual Studio 编译器提供的安全gets函数,因此仅在该编译器环境底下可以使用
(局限性,那也不要用了)

getline()

接收一个字符串,可以接收空格并输出

#include

string str;
getline(cin,str);
cout<<str<<endl;

当同时使用cin>>,getline()时,需要注意的是,在cin>>输入流完成之后,getline()之前,需要通过

str="\n";
getline(cin,str);

的方式将回车符作为输入流cin以清除缓存,如果不这样做的话,在控制台上就不会出现getline()的输入提示,而直接跳过,因为程序默认地将之前的变量作为输入流。 (直接摘录自参考,不太理解)

获取字符串、字符数组长度

参考 获取C/C++字符串、字符数组长度

char数组
  1. 获得数组大小 用 sizeof()
    求所占总空间的字节数,静态的,跟初始状态字符数组的大小有关系
	char str1[10];
	int size = sizeof(str1) / sizeof(str1[0]);
	cout << size << endl; // 10
  1. 获得数据长度 用 strlen()
    从开始到遇到第一个"\0"
	char str2[10] = "123";
	cout << strlen(str2) << endl; // 3
string
	string str3 = "1234";
	cout << str3.length() << endl; // 4

string的字符串拼接操作

string类型的随便加
#include

string str1 = "12";
string str2 = "34";
string str3 = "56";
string str = str1 + str2 + str3;
cout << str << endl; // 123456

但是! string str = “12” + “34” + “56” 会报错

""类型处理后加

参考 解决c++中 “” “” 拼接
错误案例如下:
错误案例
处理方法:显式声明其中一个为std::string类型

string str = "12" + string("34");
拼接int类型

to_string() 一下 (int -> string)

int x = 12;
string str1 = "34";
string str = to_string(x) + str1;
cout << str << endl; // 1234

补充知识点 string -> int
atoi + str.c_str()

string str = "12";
int num = atoi(str.c_str());

刷题

  1. P2141 [NOIP2014 普及组] 珠心算测验
  2. P1125 [NOIP2008 提高组] 笨小猴
  3. P1957 口算练习题

心得

  1. 我勒个逗 第1题(珠心算)真的审题…“其中有多少个数,恰好等于集合中另外两个(不同的)数之和?”–1+4= 5 & 2+3=5属于一种…反着问就完全不一样了,注意审题就真
  2. 第2题,so easy
  3. 第3题,难绷,《大红大紫》了已经,卡了很久…样例都过了,感觉应该是读入的问题(cin和getline那个可能性被排除,试过了)下次有下载权限时再扣扣
    lqb日志03_第1张图片
  4. 今天做的主要是洛谷的数组题单,map yyds!真好用啊

小结

题做得很少…知识倒学了很多(扶额苦笑)
进度要加快了!
加油! ! !

你可能感兴趣的:(蓝桥杯日志,c语言,算法,蓝桥杯,c++)