概述
DC 连结
上次的线上讨论因为大家的能力不太一样,讲一些东西时有人已经会了,有些人不会。
这样会让整个课堂变得很无趣,所以以后会改个方针
变成 : 开这周的题目 ==> 讲要用的工具(基础题) ==> 会的讨论,不会的讲一下工具用法与题示
大概讲讲下面会讲甚么:
0. 必先预备知识
在下篇文章02for_each跟这有关的题目与测值题目的提示留言区:範例code(会在DC设暴雷)
必先预备知识
因为前面的东西网路上已经一大堆,而且太简单这里就不讲
各位可以先看一下
cin
cout
标头档 与 namespace字串(string
) 与 字元(char
)4.基本迴圈(
if
、for
、while
switch
)5.阵列
getline & cin 比较
两者都可以接收使用者输入,但有一个不同:
当我今天宣告一个字串变数如果我要输入hello cpp
使用cin
的话
cin>>scout<<s;
的到的结果
hello
会发现他只有把hello给存取而cpp则不会存入s
因为cin会因为读到空格而结束,所以读到hello时遇到空格,读取结束,s存入hello
如果我们要读整行怎么办呢?
这个时候,就要使用getline
:
getline
与cin
不同,cin
是遇到空格结束,而getline
是遇到'\n'(换行)才结束读取
使用方法:
// getline (取得字串方式(输入:cin) , 要存到的变数里(s))getline(cin,s);cout<<s;
这样我们就得到了:
hello cpp
总结:当我们想要存取一行字在同一个变数里时,就使用getline
吧!
map
个里给一个情境:
当今天选举时,我想知道这个候选人被投了几票时,怎么使用C++来计算呢?
有学过一点的可能会说可以用二阶阵列,但如果我想要依照ASCII来排序候选人的名字时,用二阶阵列就会有相形见绌的地方了
所以我们来介绍一个工具map
使用前,程式码需要包含几个东西
标头档#include<map>
namepsaceusing namespace std;
map
顾名思义就是地图 :我们需要一个住址与住址带果们到的房子
也可以把他想成邮寄包裹
,会有包裹编号
与包裹里面的内容物
需要注意几点:
我们是由住址
去找到房子
由包裹编号
去找到包裹里面的内容物
然后我们就可以建立一个map
!
map<string,string> box
讲解一下再<
>
里的东西
用包裹编号
与内容物
来举例的话:
< 包裹编号的类型(可以是int、string、char...) , 内容物的类型(可以是int、string、char...) > 变数名称
用<
>
包起来,而变数名称你可以想像他是物流公司(里面有很多的包裹,每个包裹都有编号
与内容物
)
ok,现在我们已经建立一个map了,接下来就是在里面建立包裹了!
// 变数名称[编号] = 内容物box["10001"] = "4090显示卡";box["940894"] = "用过的卫生纸";
如上所示:
我们建立了两个包裹,编号分别为10001
与948794
而在10001
中我们会找到4090显示卡
在948794
会找到用过的卫生纸
可以试试看:
cout<< box["10001"]<<endl;// 得到 4090cout<< box["948794"]<<endl; //得到 用过的卫生纸cout<< box["222"]<<endl; //未建立编号222 ==>没东西
输出结果:
4090显示卡用过的卫生纸
当然如你有需要,可以在製作更多的【包裹】XD
map 重点!!!
用专业的讲法:variable_name[key] = value ;
variable_name
就是变数名称(在例子中就是指box)
我们说的包裹编号就是: key
而value
当然就是内容物拉
map 会排列
key
(注意:不会排value,value会跟着key一起排)按照 ASCII code(第一个字)
如果我们建立
map <string,int> the_bone;the_bone["zzz"] = 5;the_bone["azzzzzzzzzzz"] = 6;the_bone["c"] = 9;
进入map后会被自动排序变成:(a<c<z)
the_bone["azzzzzzzzzzz"] = 6;the_bone["c"] = 9;the_bone["zzz"] = 5;
一些小细节须注意在建立map后
包裹
的型态必须跟建立的型态相同map<string,string> box //编号:字串 || 内容物:字串box[1234] = "吉娃娃";//错误==>编号:整数 || 内容物:字串box["23232"] = 大宝剑; //编号:字串 || 内容物:变数(未定义)<==错误(字串应该用""包起来)Bbox["666"] = "刮腿毛,捡到男高中生"; // 错误==>未定义 Bbox
情境:
如果我今天要让使用者自己输入编号或包裹内容呢?
那我们可以这样:
string s,s1;cin>>s>>s1;box[s] = s1;cout<<box[s]<<endl;
这样就建立拉!
试试输入:
1234
九转大肠
输出结果
九转大肠
新鲜的大肠就送到你家搂~XD
当然map
最主要的目的是用来计数的
假如说我们想看看一串话(hello cpp)每个子母出现几次
建立一个map
map<char,int> eee;//编号:字元(英文字母) || 内容物:整数
接下来我们要读取一串话(会有空格) ==>用getline
string s;getline(cin,s);
然后用for
经过整个s并且存入map
for (int i = 0; i < s.length(); i++)//从s[0] 到 s[最后一个字] { if (s[i] != ' ')//如果不是空格就存入 eee[s[i]]++; }
人体操做一次:
s[0] = 'h' ==> eee[s[0]]++ 也就是 eee['h'] = 1 s[1] = 'e' ==> eee[s[1]]++ 也就是 eee['e'] = 1s[2] = 'l' ==> eee[s[2]]++ 也就是 eee['l'] = 1s[3] = 'l' ==> eee[s[3]]++ 也就是 eee['l'] = 2s[4] = 'o' ==> eee[s[4]]++ 也就是 eee['o'] = 1s[5] = ' ' ==> 为空格 ==> 不存入s[6] = 'c' ==> eee[s[4]]++ 也就是 eee['c'] = 1s[7] = 'p' ==> eee[s[7]]++ 也就是 eee['p'] = 1s[8] = 'p' ==> eee[s[8]]++ 也就是 eee['p'] = 2
经过程式可以得到:
//会自动排keyeee['c'] = 1;eee['e'] = 1;eee['h'] = 1;eee['l'] = 2;eee['o'] = 1;eee['p'] = 2;
因为文章有长度限制,咱们在下篇继续