C++的一些小操作、常用库及函数(持续更新)
1. 强制保留n位小数(位数不足则强制补零)
头文件:
#include <iomanip>
在输出前:
cout<<setprecision(n);
也有不用头文件的方式,在输出前:
cout.setf(ios::fixed);
cout.precision(n);
Printf也可:(以保留3位为例)
double d=2.0;
printf("%.3lf",d);
2.数组清零
头文件及方法:
#include <cstring>
...
memset(a,0,sizeof(a))
3.动态数组vector
不存东西时不占空间,来多少数据就用多少空间,用于节省空间。
#include <vector> //调用
...
vector < int > a; //声明
...
a.push_back (3) //在数组a的后面添加一个数3
a.pop_back() //在尾部弹出一个数据
a.size() //返回元素个数
a.clear() //清空
求值: a[0] (该数组第一个数) a.back() (该数组最后一个数)
4.队列queue与栈stack
队列的调用与定义:
#include <queue>
...
queue <int> q;
几个函数:
q.empty() (队列为空返回true 否则返回false)
q.size() (返回队列元素个数)
q.pop() (删除队尾元素)
q.push(a) (在队尾加入元素a)
q.front() (返回队首元素)
q.back() (返回队尾元素)
栈的调用与定义
#include <stack>
...
stack <int> s;
几个函数:
s.empty() (栈为空返回true 否则返回false)
s.size() (返回栈中元素个数)
s.pop() (过程,删除栈顶元素)
s.top() (返回栈顶元素)
s.push(a) (在栈顶加入元素a)
5. C++输入输出(重点)
C输入输出
头文件:
#include <stdio.h>
...
int n;
scanf("%d",&n);
字符:%c
字符数组:%s
long long(unsigned long long): %lld
float: %f
double : %lf
(注意:scanf和cin一样,遇到空格会结束)
多组数据连续读入(EOF一定要大写):
while (scanf("%d",&t)!=EOF)
输出:
printf("%d",n)
与scanf的区别:不用&取地址
在输出的时候也可直接输出字符内容
int a,b,c;
scanf("%d%d",&a,&b);
c=a+b;
printf("%d+%d=%d\n",a,b,c);
输入:4 5
输出:4+5=9
“\n”表示回车
直接写printf("%d+%d=%d\n",a,b,a+b)也行
字符串(字符数组)输入输出
两者均可直接cin、cout。
对于字符数组,还可:(此法无法读入string)
char c[50];
scanf("%s",&c);
printf("%s",c);
使用以上方法输入时,遇到空格会结束。
含空格的字符串(字符数组)输入输出
对于字符数组:
scanf("%[^\n]",&c);
表示遇到回车才算读入结束
还可:
cin.get(c,50);
后一个参数表示接受读入的位数,若参数为50,实际最多可接收49个字符,若输入长度不够,毫无影响。
(这个参数可以超过字符数组的长度!)
此外,cin.getline()与cin.get功能、参数一样。
对于字符串:(需要头文件)
#include <string>
...
getline(cin,s);
6.字符串(字符数组)处理函数(重点)
以下所有有关位置的参数,事先明确,无论是字符数组还是字符串,首字符索引都为0。
获取长度
对于字符串s有s.size(),对于字符数组c,有strlen(c)。
比较
比较规则:自左向右逐个字符比较,直到区分或者某字符串(数组)结束,此时认为短的那个字符串(数组)小。
对于字符数组:
strcmp(c1,c2);
strncmp(c1,c2,n);
后一个表示比较两个字符数组的前n位。
若c1==c2,则返回零;若c1<c2,则返回负数;若c1>c2,则返回正数。
对于字符串,直接>、<、==,也可以:
str1.compare(str2);
str1.compare(pos1,len1,str2,pos2,len2);
连接
对于string,可以直接使用加号连接,如:
string s="a";
s+='b';
s+="cd";
也可以:
str1.append(str2);
str1.append(str2,pos,len);
前者相当于s1+=s2;
后者也是在s1的末尾加,加s2的第pos位开始的连续len个字符。
对于字符数组:
strcat(c1,c2);
strncat(c1,c2,n);
将c2加到c1中,后一个是将c2的前n个字符加到c1中。
查找
对于字符数组:
strchr(c,char);
strstr(c,c2);
前者:找到字符char在字符数组c中第一次出现的位置,并返回包括该位置字符及其之后的c的子数组。
后者:与前者相似,找的是字符数组c2。
若没找到,两者无输出(且在此之后所有输出语句好像都失效了)。
对于字符串:(后者表示从后往前找)
str1.find(str2);
str1.rfind(str2);
返回一个整数,表示str2在str1中第一次出现的位置,若没有返回-1。
清除
对string:
s.clear(www.michenggw.com);//全部清除
s.erase(pos,len);
插入
对string:
str1.insert(pos1,str2);
str1.insert(pos1,str2,pos2,len2);
str1.insert(pos1,num,char);
numchar是插入次数,char是要插入的字符。
提取
对String:
str2 = str1.substr(pos);
str2 = str1.substr(pos,www.dasheng178.com/ len);
前者:将str1从第pos位及之后的所有字符赋值给str2。
后者:将str1从第pos位开始连续len个字符赋值给str2。
替换
对字符数组:
strcpy(str1,str2);
strncpy(str1,str2,n);
前者相当于str1=str2;
后者指把str2的前n位替换掉str1的前n位。
对于字符串:
str1.replace(pos1,www.mcyllpt.com/ len1,str2);
str1.replace(pos1,len1,str2,pos2,len2);
前者:把str1从pos1开始的连续len1位替换成str2。
后者:多出的两个参数指定了str2参与替换的部分。
字符串与字符数组相互转换
字符数组可直接赋值给字符串。
字符串s转字符数组a:
strcpy(a,s.c_str());
字符(串)数组与数字相互转换
字符数组转数字:
char a[]="123.456";
int t;
double d;
sscanf(a,"%d",&t);
sscanf(a,"%lf",&d);
不仅可以转成整数,也可以识别小数点,直接转成实数。
数字转字符数组:
char a[www.hengy178.com];
int t=123;
double d=12.34;
sprintf(a,"%d",t);
sprintf(a,"%lf",d);
字符串转数字:
#include <sstream>
...
string str = "123.45";
double d;
stringstream ss;
ss << str;
ss >> d;
数字a转字符串str:(同样支持整数和实数)
#include <sstream>
...
double a=12.34;
string str;
stringstream ss;
ss << a;
ss >> str;
PS:stringstream在数据量大的时候太慢,建议使用字符数组类型的转换。
--------------------
C++的一些小操作、常用库及函数(持续更新)的更多相关文章
- STL 一些常用的STL函数(持续更新
先说一下 一边要用到算法的东西一般要加#include<algorithm>头文件 一.栈和队列 1 栈 :一种线性表 特点 后进先出 头文件 #include<stack&g ...
- php 常用的好函数(持续更新)
parse_url parse_url $url = "http://www.electrictoolbox.com/php-extract-domain-from-full-url/&qu ...
- iOS:开发常用GitHub开源项目(持续更新)
IOS开发常用GitHub开源项目(持续更新) 数据类 开源库 作者 简介 AFNetworking Mattt 网络请求库 ASIHTTPRequest pokeb 网络请求库 Alamofire ...
- Android 常用开源库总结(持续更新)
前言 收集了一些比较常见的开源库,特此记录(已收录350+).另外,本文将持续更新,大家有关于Android 优秀的开源库,也可以在下面留言. 一 .基本控件 TextView HTextView 一 ...
- 资源| 学习视频库-永久有效,持续更新!附赠java面试汇总
每天进步一丢丢,连接梦与想 我们总是羡慕他人的光芒,却忘记自己也会发光 声明 资源来自于网络,小编只是资源的搬运工,若有侵权,联系小编即删. 期待已久的学习视频库来啦! 经过小编多日整理,整理了1.5 ...
- PHP的常用函数 持续更新
PHP的常用函数 前言: 由于害怕遗忘,故在此记录下常用的php函数,以便复习 1 define函数 作用:定义常量 用法 <?php define('a',100); ?> 2 intv ...
- Android常用开源库集合【持续更新】
1.FastJson 阿里巴巴工程师做的一个方便的JSON转换库 2.ButterKnife 只要作用能代替代码中大量的findviewbyid语句的使用,使用@injectview注入方式 3.v ...
- C语音常用库和函数
#include <assert.h> //设定插入点 #include <ctype.h> //字符处理 #include <errno.h> //定义错误码 # ...
- sqlserver常用知识点备忘录(持续更新)
背景 一个项目的开发,离不开数据库的相关操作,表/视图设计,存储过程,触发器等等数据库对象的操作是非常频繁的.有时候,我们会查找系统中类似的代码,然后复制/粘贴进行再进行相应的修改.本文的目的在于归纳 ...
随机推荐
- Yii 2.0.6 - 从入口到Action执行
defined('YII_DEBUG') or define('YII_DEBUG', true); defined('YII_ENV') or define('YII_ENV', 'dev'); r ...
- 更新Composer依赖报错处理Fatal error: Declaration of Fxp\Composer\AssetPlugin\Repository\AbstractAssetsRe
更新Composer依赖报错处理 Fatal error: Declaration of Fxp\Composer\AssetPlugin\Repository\AbstractAssetsRe po ...
- js bom和dom
一, 前言 到目前为止,我们已经学过了JavaScript的一些简单的语法.但是这些简单的语法,并没有和浏览器有任何交互. 也就是我们还不能制作一些我们经常看到的网页的一些交互,我们需要继续学习BOM ...
- Drupal 网站漏洞修复以及网站安全防护加固方法
drupal是目前网站系统使用较多一个开源PHP管理系统,架构使用的是php环境+mysql数据库的环境配置,drupal的代码开发较为严谨,安全性较高,但是再安全的网站系统,也会出现网站漏洞,dru ...
- 使用java多线程分批处理数据工具类
最近由于业务需要,数据量比较大,需要使用多线程来分批处理,提高处理效率和能力,于是就写了一个通用的多线程处理工具,只需要实现自己的业务逻辑就可以正常使用,现在记录一下 主要是针对大数据量list,将l ...
- linux安装软件的几种方式(kali平台)和一些实用的软件(持续更新)
安装软件前我们先更改镜像源,编辑 /etc/apt/sources.list 文件, 在文件最前面添加以下条目: #中科大更新源 deb https://mirrors.ustc.edu.cn/kal ...
- 北京Uber优步司机奖励政策(3月25日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- 使用apache的ab压力测试时失败请求原因
只要出现 Failed requests 就会多出现一行要求失败的各原因的数据统计,分别有 Connect, Length,与 Exception 三种,分别代表的意义为:Connect 无 ...
- 给apk签名
一.签名 把apk和签名文件放在jdk bin目录下,然后在jkd bin目录下执行以下代码: jarsigner -verbose -keystore xxx.keystore -signedjar ...
- 快速平方根算法的javascript实现
前几天看见了一个来自雷神之槌的平方根源码,原理多方有介绍,不赘述. 源码是c语言写的,我思考后发现这样的算法在javascript中也是可以完成的. function InvSqrt(x){ var ...