知识内容:

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>,然后实例化一个 string类对象,然后通过对象名.方法名() 来调用类中的方法

另外注意 使用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] = 字符

使用实例:

 #include <iostream>
#include <string>
using namespace std; int main()
{
string s;
s = "hello"; // string对象可直接赋值
cout << s << endl;
s += " zl"; // string对象可直接与其他字符串相加
cout << s << endl;
cout << s.length() << endl; //输出字符串长度 //字符串比较
if(s=="hello world")
{
cout << "equal to 'hello world'" << endl;
}
else
{
cout << "not equal to 'hello world'" << endl;
} s[] = 'z'; //字符串赋值
cout << s << endl;
cout << s[] << endl; //输出字符串中第一个字符的值 return ;
}

二、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.代码实现

 //  输出0--32的二进制数
// 非递归 #include <iostream>
#include <string>
using namespace std; //将数字转化成二进制 返回二进制字符串
string transfer_binary(int n)
{
string res;
string flag("0b");
while(true)
{
int i;
i = n%;
n = n/;
switch(i)
{
case : res = '' + res; break;
case : res = '' + res; break;
}
if(n==) break;
}
// 加上二进制的标志位
res = flag + res; return res;
} //输出最后结果
void output_binary(int n)
{
cout << n << ": " << transfer_binary(n) << endl;
} int main()
{
for(int i=;i<=;i++)
{
output_binary(i);
} return ;
}

三、10进制转8进制和10进制转16进制

1.原理:

学会上面的10进制转2进制后,10进制转8进制或10进制转16进制都很简单,在原理上是一样的,不过8进制以8为基数,16进制的基数是16,10以后以字母代替。

2.代码实现

10进制转8进制实现:

 //  输出0--32的八进制数
// 非递归 #include <iostream>
#include <string>
using namespace std; //将数字转化成八进制 返回八进制字符串
string transfer_binary(int n)
{
string res;
string flag("");
while(true)
{
int i;
i = n%;
n = n/;
switch(i)
{
case : res = '' + res; break;
case : res = '' + res; break;
case : res = '' + res; break;
case : res = '' + res; break;
case : res = '' + res; break;
case : res = '' + res; break;
case : res = '' + res; break;
case : res = '' + res; break;
}
if(n==) break;
}
// 加上八进制的标志位
res = flag + res; return res;
} //输出最后结果
void output_binary(int n)
{
cout << n << ": " << transfer_binary(n) << endl;
} int main()
{
for(int i=;i<=;i++)
{
output_binary(i);
} return ;
}

10进制转16进制实现:

 //  输出0--32的十六进制数
// 非递归 #include <iostream>
#include <string>
using namespace std; //将数字转化成十六进制 返回十六进制字符串
string transfer_binary(int n)
{
string res;
string flag("0x");
while(true)
{
int i;
i = n%;
n = n/;
switch(i)
{
case : res = 'F' + res; break;
case : res = 'E' + res; break;
case : res = 'D' + res; break;
case : res = 'C' + res; break;
case : res = 'B' + res; break;
case : res = 'A' + res; break;
case : res = '' + res; break;
case : res = '' + res; break;
case : res = '' + res; break;
case : res = '' + res; break;
case : res = '' + res; break;
case : res = '' + res; break;
case : res = '' + res; break;
case : res = '' + res; break;
case : res = '' + res; break;
case : res = '' + res; break;
}
if(n==) break;
}
// 加上十六进制的标志位
res = flag + res; return res;
} //输出最后结果
void output_binary(int n)
{
cout << n << ": " << transfer_binary(n) << endl;
} int main()
{
for(int i=;i<=;i++)
{
output_binary(i);
} return ;
}

四、上述3种转换的递归实现

1.关于递归详细介绍:

2.递归实现10进制转2进制

C++实现进制转换的更多相关文章

  1. SQL Server 进制转换函数

    一.背景 前段时间群里的朋友问了一个问题:“在查询时增加一个递增序列,如:0x00000001,即每一个都是36进位(0—9,A--Z),0x0000000Z后面将是0x00000010,生成一个像下 ...

  2. [No000071]C# 进制转换(二进制、十六进制、十进制互转)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  3. JS中的进制转换以及作用

    js的进制转换, 分为2进制,8进制,10进制,16进制之间的相互转换, 我们直接利用 对象.toString()即可实现: //10进制转为16进制 ().toString() // =>&q ...

  4. 结合stack数据结构,实现不同进制转换的算法

    #!/usr/bin/env python # -*- coding: utf-8 -*- # learn <<Problem Solving with Algorithms and Da ...

  5. 进制转换( C++字符数组 )

    注: 较为简便的方法是用 整型(int)或浮点型(long.double 注意:该类型不一定能够准确存储数据) 来存放待转换的数值,可直接取余得到每一位数值 较为稳定的方法是用 字符数组储存待转换的数 ...

  6. JS 进制转换

    十进制转换成其他进制 objectname.toString([radix])   objectname 必选项.要得到字符串表示的对象. radix 可选项.指定将数字值转换为字符串时的进制. 例如 ...

  7. php的进制转换

    学习了php的进制转换,有很多的知识点,逻辑,也有最原始的笔算,但是我们还是习惯使用代码来实现进制的转换,进制的转换代码有如下:二进制(bin)八进制( oct)十进制( dec)十六进制( hex) ...

  8. C++ 中数串互转、进制转换的类

    /******************************************************************** created: 2014/03/16 22:56 file ...

  9. 【String与基本类型之间的转换】以及【进制转换】

    1. 基本数据类型---->字符串类型: 方法一:使用连接一个空字符串,例如  基本数据类型+“” : 方法二:静态方法 String.valueOf(),具体有: String.valueOf ...

  10. C# 进制转换 (没有数值的长度限制)

    曾经在大学时做过一个c的进制转换算法,那时由于技术的局限性,数值的大小受到限制(系统数据类型长度限制),多年以后,自己那台学习机陈旧后感觉要报废了,整理了一下里面的东西,偶尔在一个角落里发现了这个转换 ...

随机推荐

  1. css 发光样式

    结果: css/style1.css: /*setup*/ *{ margin:; padding:; } @font-face { font-family: 'Monoton'; font-styl ...

  2. 判断序列是否为二叉排序树的后序遍历 python

    题目:给定一个序列,判断其是不是一颗二叉排序树的后序遍历结果 分析:首先要知道什么是排序二叉树,二叉排序树是这样定义的,二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左 ...

  3. Extjs 5 可选择日期+时间的组件DateTimeField

    我们都知道ExtJs有日期组件DateField,但直到ExtJs 5.0版本该日期组件也只能选择日期,不能选择时间(具体到时.分.秒),而实际工作中又常常会有需要日期和时间同时选择的需求,我们只能自 ...

  4. 高并发异步uwsgi+web.py+gevent

    为什么用web.py? python的web框架有很多,比如webpy.flask.bottle等,但是为什么我们选了webpy呢?想了好久,未果,硬要给解释,我想可能原因有两个:第一个是兄弟项目组用 ...

  5. vim让一些不可见的字符显示出来吧

    http://www.cnblogs.com/chenwenbiao/archive/2011/10/26/2225467.html :set list

  6. Linux 查看版本號

    前言 剛剛升級了Fedora27,想要一查究竟.無奈竟不知如何查看linux版本,依稀記得uname好像可以,輸入之後就尷尬了. $ uname Linux 查看網上各種教程,看到一個不錯的博文,爲[ ...

  7. 实战maven私有仓库三部曲之二:上传到私有仓库

    在上一章<实战maven私有仓库三部曲之一:搭建和使用>我们搭建了maven私有仓库,并体验了私有仓库缓存jar包的能力,避免了局域网内开发人员去远程中央仓库下载的痛苦等待,本章我们再来体 ...

  8. XMPP协议相关知识

    XMPP协议的组成 主要的XMPP 协议范本及当今应用很广的XMPP 扩展: RFC 3920 XMPP:核心.定义了XMPP 协议框架下应用的网络架构,引入了XML Stream(XML 流)与XM ...

  9. ios 视图切换翻页效果

    本文写的是视图切换,涉及到的内容有 1.实现代码添加Navigation Bar  Toolbal: 2.实现在Navigation Bar和Toolbar上用代码添加Bar Button Item: ...

  10. 《DSP using MATLAB》示例Example 8.17

    代码: %% ------------------------------------------------------------------------ %% Output Info about ...