知识内容:
1.string类基本使用
2.10进制转2进制
3.10进制转8进制和10进制转16进制
4.上述3种转换的递归实现
注:进制的表示:
- 二进制:开头是0b,eg: 0b1011(注:c/c++中没有二进制字面常量的表示方法,但是在这里为了区分,我们设定此规则)
- 八进制:开头是0,eg: 017
- 十六进制:开头是0x,eg: 0x13
一、string类基本使用
1.string类介绍
(1)C++中的string类是什么? -> 了解
string是C++系统提供的一个类,封装了常用的字符串操作
(2)C++中string类的优点是什么? -> 了解
之所以抛弃char的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个泛型类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。我们完全可以 把它看成是 C++的基本数据类型
(3)C++中的string类使用原理是什么? -> 了解*
string类是基于 面向对象的思想 编写的类库,要使用string类就要先引入string类即:#include
另外注意 使用string类 必须声明名称空间也就是在引入类的代码后 加上这一句: using namespace std;
2.使用string类
string类中的常用方法及操作 -> 只介绍了最常用的4种,基本上会了以下4个方法字符串的常规操作都能简单完成,关于string类详细方法见此:https://www.cnblogs.com/wyb666/p/8644342.html
(1)初始化
- string s; //生成一个空字符串 -> 最常用,一般直接使用这个创建字符串
- string s("hello world!"); //生成一个字符串,字符串为"hello world!"
- string s(5, 'c'); //用5个c生成一个字符串,字符串为"ccccc"
- 还有些方法不是很常用就不在这里介绍了
注:(2)-(4)使用前需使用(1)中方法生成字符串对象,然后使用字符串对象.方法名来调用方法
(2) 求长度
- length()
- size()
(3) 拼接字符串、字符串比较
- 拼接字符串可以直接使用 +
- 字符串比较可以直接使用 > < >= <= ==
(4) 字符串取值、字符串赋值
字符串取值:
字符串对象[index]
字符串赋值:
字符串对象 = 字符串对象
字符串对象[index] = 字符
使用实例:
1 #include <iostream>
2 #include <string>
3 using namespace std;
4
5 int main()
6 {
7 string s;
8 s = "hello"; // string对象可直接赋值
9 cout << s << endl;
10 s += " zl"; // string对象可直接与其他字符串相加
11 cout << s << endl;
12 cout << s.length() << endl; //输出字符串长度
13
14 //字符串比较
15 if(s=="hello world")
16 {
17 cout << "equal to 'hello world'" << endl;
18 }
19 else
20 {
21 cout << "not equal to 'hello world'" << endl;
22 }
23
24 s[7] = 'z'; //字符串赋值
25 cout << s << endl;
26 cout << s[0] << endl; //输出字符串中第一个字符的值
27
28 return 0;
29 }
二、10进制转2进制
1.实现原理
10进制转2进制:整除去余法,详细步骤见下图
思路:我们每次把一个数除2把余数存起来,然后把这个数赋值为除2后的结果,循环下去直到这个数为0时退出循环,在上述的过程中这一系列余数我们可以保存在字符串中或者数组中
2.函数逻辑设计
为了让程序逻辑更清楚,我们将所有的功能封装到函数中,主函数只负责主逻辑,另外有一个专门的函数output_outcome来控制程序输出的结果格式,在这个函数中调用函数transfer_binary将要转化成2进制的10进制数转化成2进制
由此我们程序的最核心就是transfer_binary函数,这个函数就是实现10进制转2进制,函数参数为10进制数(int),函数返回值为string类字符串
关于为什么使用string类字符串:string类字符串使用简单方便,内部封装了很多方法,当然在上述思路中的提到的余数也可以存储到数组中,然后最后把数组到者输出就是二进制了
transfer_binary函数思路:
假设参数为number,写一个死循环(循环必须在某处跳出!),在循环中,将number%2放入字符串或数组中,然后将number赋值为number/2,在循环最后判断是否number为0,如果number为0就break退出程序
有了上述的transfer_binary函数的思路后,写程序无非就是不断尝试,看输出结果,根据输出结果不断去调试代码,修改代码,直到最后实现自己想要的功能,没有人可以一次性把一个功能写完,经历了很多次的努力与尝试是很正常的事,有点小挫折没什么大不了的
3.代码实现
1 // 输出0--32的二进制数
2 // 非递归
3
4 #include <iostream>
5 #include <string>
6 using namespace std;
7
8 //将数字转化成二进制 返回二进制字符串
9 string transfer_binary(int n)
10 {
11 string res;
12 string flag("0b");
13 while(true)
14 {
15 int i;
16 i = n%2;
17 n = n/2;
18 switch(i)
19 {
20 case 1: res = '1' + res; break;
21 case 0: res = '0' + res; break;
22 }
23 if(n==0) break;
24 }
25 // 加上二进制的标志位
26 res = flag + res;
27
28 return res;
29 }
30
31 //输出最后结果
32 void output_binary(int n)
33 {
34 cout << n << ": " << transfer_binary(n) << endl;
35 }
36
37 int main()
38 {
39 for(int i=0;i<=32;i++)
40 {
41 output_binary(i);
42 }
43
44 return 0;
45 }
三、10进制转8进制和10进制转16进制
1.原理:
学会上面的10进制转2进制后,10进制转8进制或10进制转16进制都很简单,在原理上是一样的,不过8进制以8为基数,16进制的基数是16,10以后以字母代替。
2.代码实现
10进制转8进制实现:
1 // 输出0--32的八进制数
2 // 非递归
3
4 #include <iostream>
5 #include <string>
6 using namespace std;
7
8 //将数字转化成八进制 返回八进制字符串
9 string transfer_binary(int n)
10 {
11 string res;
12 string flag("0");
13 while(true)
14 {
15 int i;
16 i = n%8;
17 n = n/8;
18 switch(i)
19 {
20 case 7: res = '7' + res; break;
21 case 6: res = '6' + res; break;
22 case 5: res = '5' + res; break;
23 case 4: res = '4' + res; break;
24 case 3: res = '3' + res; break;
25 case 2: res = '2' + res; break;
26 case 1: res = '1' + res; break;
27 case 0: res = '0' + res; break;
28 }
29 if(n==0) break;
30 }
31 // 加上八进制的标志位
32 res = flag + res;
33
34
35 return res;
36 }
37
38 //输出最后结果
39 void output_binary(int n)
40 {
41 cout << n << ": " << transfer_binary(n) << endl;
42 }
43
44 int main()
45 {
46 for(int i=0;i<=32;i++)
47 {
48 output_binary(i);
49 }
50
51 return 0;
52 }
10进制转16进制实现:
1 // 输出0--32的十六进制数
2 // 非递归
3
4 #include <iostream>
5 #include <string>
6 using namespace std;
7
8 //将数字转化成十六进制 返回十六进制字符串
9 string transfer_binary(int n)
10 {
11 string res;
12 string flag("0x");
13 while(true)
14 {
15 int i;
16 i = n%16;
17 n = n/16;
18 switch(i)
19 {
20 case 15: res = 'F' + res; break;
21 case 14: res = 'E' + res; break;
22 case 13: res = 'D' + res; break;
23 case 12: res = 'C' + res; break;
24 case 11: res = 'B' + res; break;
25 case 10: res = 'A' + res; break;
26 case 9: res = '9' + res; break;
27 case 8: res = '8' + res; break;
28 case 7: res = '7' + res; break;
29 case 6: res = '6' + res; break;
30 case 5: res = '5' + res; break;
31 case 4: res = '4' + res; break;
32 case 3: res = '3' + res; break;
33 case 2: res = '2' + res; break;
34 case 1: res = '1' + res; break;
35 case 0: res = '0' + res; break;
36 }
37 if(n==0) break;
38 }
39 // 加上十六进制的标志位
40 res = flag + res;
41
42
43 return res;
44 }
45
46 //输出最后结果
47 void output_binary(int n)
48 {
49 cout << n << ": " << transfer_binary(n) << endl;
50 }
51
52 int main()
53 {
54 for(int i=0;i<=32;i++)
55 {
56 output_binary(i);
57 }
58
59 return 0;
60 }
四、上述3种转换的递归实现
1.关于递归详细介绍:
2.递归实现10进制转2进制
原文链接: https://www.cnblogs.com/wyb666/p/9153388.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/275512
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!