C++ 使用技巧(持续更新)

C++使用技巧

  • 技巧1:char类型 -> int类型
  • 技巧2:string类型 -> int类型
  • 技巧3:对正数保留n位小数(四舍五入)
  • 技巧4:对负数保留n位小数(四舍五入)

技巧1:char类型 -> int类型

概述:利用ASCII码,将char类型转化成int类型
用下面的例子阐述一下原理,字符’6’的ASCII码值是54,字符’0’的ASCII码值是48,‘6’ - '0’就等价于54 - 84 = 6,依靠这个原理,实现从char 类型的 ‘6’ 到 int 类型的 6 的转换,因此这个方法可以实现单个字符型数字到int型数字的转换

#include
using namespace std;

int main()
{
	char a = '6';
	int b = a - '0';
	cout << b << endl;
	return 0;
}

技巧2:string类型 -> int类型

概述:将 string str = ‘123456’ 转换成 int a = 123456,只需要使用 atoi(str.c_str()) 函数或者stoi(str)函数。 atoi()函数是C标准库函数,stoi()函数是STL库函数,包含在头文件 #include 中。

atoi()函数:
ㆍ会跳过前面的空白字符(包括空格,tab符号等),直到遇到第一个非空字符,并在遇到下一个非数字字符时结束转换;
ㆍ转换的内容为正负符号和数字字符;
ㆍ并且返回值为十进制;
ㆍ函数在转换时,如果遇到入参str不能转换或者str为空字符串时,返回值为0,不会抛出异常;

c_str()成员函数:
ㆍc_str()会返回一个指向正规C字符串的指针常量, 内容与本string串相同,这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式
ㆍc_str()是一个内容为字符串指向字符数组的临时指针;
ㆍc_str()返回的是一个可读不可改的常指针;

std::stoi()函数:
ㆍ会跳过最前面的空白字符(包括空格,tab符号等),直到遇到第一个非空字符,并在遇到下一个非数字字符时结束转换;
ㆍ转换的内容为正负符号和数字字符;
ㆍ可以指定开始转换的pos;
ㆍ可以转换成十进制,八进制和十六进制;
ㆍ函数在转换时,如果入参str是字母或者空字符串而无法转换成数字时,会抛出std::invalid_argument异常,使用者必须手动处理异常,否则会造成程序crash;

#include
#include
using namespace std;

int main()
{
	string str1 = "123456";
	string str2 = "654321";
	int a = atoi(str1.c_str());
	int b = atoi(str2.c_str());

	int c = stoi(str1);
	int d = stoi(str2);

	cout << a + b << endl;
	cout << c + d << endl;
	return 0;
}

技巧3:对正数保留n位小数(四舍五入)

概述:先将要保留的数字全部挪到小数点左边(保留1位小数就将原数×10,让小数点后一位数挪到小数点左边;保留2位小数就将原数×100,让小数点后两位数挪到小数点左边),再通过int来截断原数据的小数部分(实现保留n位数),再讲截断的int类型数据转化成double类型数据,再进行÷10或÷100的操作,将挪到小数点左边的数据再挪回小数点右边,从而实现保留n位小数和四舍五入。

#include
using namespace std;

int main() {
	double pi = 3.1415926;
	//保留整数
	int a = pi + 0.5;   //+0.5是为了实现四舍五入

	//保留1位小数
	int b = (pi + 0.05) * 10;
	double c = (double)b / 10;

	//保留2位小数
	int d = (pi + 0.005) * 100;
	double e = (double)d / 100;
	
	//保留3位小数
	int f = (pi + 0.0005) * 1000;
	double g = (double) f / 1000;
	
	cout << "pi保留整数 = " << a << endl;
	cout << "pi保留1位小数 = " << c << endl;
	cout << "pi保留2位小数 = " << e << endl;
	cout << "pi保留3位小数 = " << g << endl;
	return 0;
}

技巧4:对负数保留n位小数(四舍五入)

概述:-1.58四舍五入的结果为-1.6,1.58四舍五入的结果为1.6,由此可知,四舍五入只对数字部分有效,与符号无关。(写到此处,笔者针对负数的四舍五入规则进行了查询,网络上的答案不一,有的观点认为-1.5四舍五入应该为-1,因为-1 > -1.5,0.5应该要入。但笔者不这么认为,因为四舍五入的目的是缩小误差值,对于-1.9,如果按照“入就是大”的观点,-1.9四舍五入的结果就应该是-1,但显然,将-1.9的四舍五入结果定为-2误差更小,所以笔者更倾向于四舍五入是减小误差的观点,而不是“入就是大”的观点)

#include
using namespace std;

int main() {
	double a = -2.1647;
	//保留1位小数
	int b = (a - 0.05) * 10;
	double c = (double)b / 10;
	cout << c << endl;

	//保留2位小数
	b = (a - 0.005) * 100;
	c = (double)b / 100;
	cout << c << endl;

	//保留3位小数
	b = (a - 0.0005) * 1000;
	c = (double)b / 1000;
	cout << c << endl;
	return 0;
}

你可能感兴趣的:(C++,c++,visual,studio,开发语言)