C++学习笔记(三)--数组、字符串
1.数组,C++中不允许数组的下标值为变量,只能是常量或者常量表达式,必须先定义后使用。
数组赋初值几种常见方式:
int a[] = {1,2,3,4,5};
int a[4] = {2,1,3,4};
int a[4] = {1,2},其余默认为0;
或者:int a[2];a[0] = 1,a[1] = 2;
2.二维数组:
int a[2][3] = {{1,2,3},{4,5,6}};
int a[2][3] = {1,2,3,4,5,6};
int a[2][3] = {{1}{2}};
int a[][3] = {1,2,3,4,5,6,};
inr a[3][3] = {{1,2},{},{3,4,5}};
3.数组作参数:
数组元素作参数,与普通变量做参数一样;
数组名作参数,传递的是数组的地址,形参形式:
一维数组: int max(int array[]);
int max(int array[4]);
即可指明大小,也可不指明,只是用来接收数组的起始地址而已,需说明:实参传进来时,数组的起始地址与形参的起始地址一样,所以用数组名做参数,可以改变数组内值的大小,即传值传址,如果是其他的一般变量,只能传值,不能改变原实参的值。
二维数组:int min(int array[][10]);
int min(int array[3][10]);
即必须指明列数,因为二维数组是按行在内存中存储的,要让编译器知道列,才能知道行.第二维的大小应与实参的二维大小大小一样,第一维无关紧要,编译器不检查。
4.字符数组:
char xiao_min[12] = {'I',' ','am',' ','happy'};//想起了一个女孩,就用xiao_min了吧
此字符数组长度为12,而存放的字符串"I am happy"的长度为10,另外两个字符被默认置为'\0','\0'作为字符串的终止符,所以这个字符串占11字节。所以在存放字符串时,字符数组的长度要大于字符串的最大长度,因为还要存放一个用于判断字符串结束的符号'\0'啊!'\0'只是一个用于识别的标志,并不会添加什么操作。
所以给字符串数组也可以这样赋值:
char xiao_min[] = {"I love you!"};亦或者
char xiao_min[] = "I love you!";
编译时,会自动在最后添加一个'\0'以识别字符串是否终止,所以以上字符串占的内存要加上一个‘\0’所占的1个字节。
5.字符数组输入输出:
一维:
cin >>xiao_min;
cout <<xiao_min;
输入China 保存'C h i n a \0'
输出'China' 遇'\0'停止输出
二维:
for(i=0;i<10;i++)
cin >>xiao_min[i];
6.字符串函数(在cstring或者string.h):
a.字符串连接函数strcat():函数原型:strcat(char[],const char[]); const:保证字符串在调用过程中不被修改,连接后将第二个数组的值紧跟到第一个数组值后面,省略第一个数组的字符串末尾的‘\0’。
b.字符串赋值函数strcpy():函数原型:strcpy(char[],const char[]);将第二个数组的内容复制到第一个数组中,第一个数组中的数据被覆盖,第二个数组中的'\0'也会被复制。第二个参数也可以是字符串:strcpy(xiao_min,"I love you");还可以这样用strcpy(xiao_min,str2,2);即将str2的前两个字符复制到xiao_min字符数组中。
所以可以利用这个函数,给字符数组赋值字符串(仅能使用此方法给字符数组赋字符串的值)。
c.字符串比较函数:strcmp();函数原型:strcmp(const char[],const char[]);对比的既可以是数组,也可以是字符串。返回结果:
str1=str2 -> 0
str1>str2 -> 正整数
str1<str2 -> 负整数
比较规则:从左到右,按ascii码比较,直到遇见'\0'为止,全部字符一样=》相等,有不同,按第一个不同处来比较,之后不看。
注意:
if(str1>str2) return 0;//这是对字符串数组的地址进行比较
if(strcmp(str1>str2)) return 0;//这才是比较字符串
d.字符串长度strlen();函数原型strlen(const char[]);返回的是字符串的真实长度,不包括'\0'在内
例: char xiao_min[20]="You are my world!";
cout <<strlen(xiao_min); //输出值为17
以上都是C中保留的(只是为了与C兼容)。以上方法统称C-string方法
7.(建议使用->string方法)C++中处理字符串:字符串类(Gcc string占4个字节 VC++ 16字节)
#include<string>
string str1 = "China";//对比字符串数组是不允许这样的:char c[10];c = "China";cuo wu.
string str2 = "Xiaomin";
str1 = str2;
str1[0] = 'c';//此时str1="china" 注意字符串常量赋值给字符串变量时,不会将常量的结束符'\0'复制过去
字符串输入输出:
直接使用字符串变量名:
cin >>str;
cout <<str;
字符串运算:
赋值:=
连接:+
比大小:>,<,==,!=,>=,<=
还可声明字符串数组:
string xiao_min[3] = {"I ","love ","you"}; //每个字符串此时已不含'\0'
string name[5]; sizeof(name) =>20字节
C++学习笔记(三)--数组、字符串的更多相关文章
- Scala入门学习笔记三--数组使用
前言 本篇主要讲Scala的Array.BufferArray.List,更多教程请参考:Scala教程 本篇知识点概括 若长度固定则使用Array,若长度可能有 变化则使用ArrayBuffer 提 ...
- PHP学习笔记之数组篇
摘要:其实PHP中的数组和JavaScript中的数组很相似,就是一系列键值对的集合.... 转载请注明来源:PHP学习笔记之数组篇 一.如何定义数组:在PHP中创建数组主要有两种方式,下面就让我 ...
- Java IO学习笔记三
Java IO学习笔记三 在整个IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换类. OutputStreamWriter:是Writer的子类,将输出的 ...
- 学习笔记(三)--->《Java 8编程官方参考教程(第9版).pdf》:第十章到十二章学习笔记
回到顶部 注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.若有违本之,则本人不负法律责任.违法 ...
- angular学习笔记(三十一)-$location(2)
之前已经介绍了$location服务的基本用法:angular学习笔记(三十一)-$location(1). 这篇是上一篇的进阶,介绍$location的配置,兼容各版本浏览器,等. *注意,这里介绍 ...
- angular学习笔记(三十一)-$location(1)
本篇介绍angular中的$location服务的基本用法,下一篇介绍它的复杂的用法. $location服务的主要作用是用于获取当前url以及改变当前的url,并且存入历史记录. 一. 获取url的 ...
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
- VSTO学习笔记(三) 开发Office 2010 64位COM加载项
原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(A ...
- JavaScript学习笔记之数组(二)
JavaScript学习笔记之数组(二) 1.['1','2','3'].map(parseInt) 输出什么,为什么? ['1','2','3'].map(parseInt)//[1,NaN,NaN ...
- angular学习笔记(三十)-指令(10)-require和controller
本篇介绍指令的最后两个属性,require和controller 当一个指令需要和父元素指令进行通信的时候,它们就会用到这两个属性,什么意思还是要看栗子: html: <outer‐direct ...
随机推荐
- C# asp.net XML格式的字符串显示不全
前台显示XML字符串显示不全 后台XML字符串使用<xmp></xmp>将XML格式字符串括起来
- FFmpeg从入门到出家(HEVC在RTMP中的扩展)
由金山云视频云技术团队提供:FFmpeg从入门到出家第三季: 为推进HEVC视频编码格式在直播方案中的落地,经过CDN联盟讨论,并和主流云服务厂商达成一致,规范了HEVC在RTMP/FLV中的扩展,具 ...
- Vue —— You may use special comments to disable some warnings. Use // eslint-disable-next-line to ignore the next line. Use /* eslint-disable */ to ignore all warnings in a file.问题
方法1: 在build/webpack.base.conf.js文件中,找到module->rules中有关eslint的规则,注释或者删除掉就可以了 module: { rules: [ // ...
- 第三讲JdbcRealm及Authentication Strategy
1.使用shiro框架来完成认证工作,默认情况下使用的是IniRealm.如果需要使用其他Realm,那么需要进行相关的配置. 2.ini配置文件讲解: [main] section是你配置应用程序的 ...
- python在类中使用__slot__属性
在类中定义__slot__属性来限制实例的属性字段,在创建大量对象的场合可以减少内存占用. 创建大量对象是内存占用对比: 类中不使用__slot__ class MySlot:def __init__ ...
- uniq 去除重复行
1.命令功能 uniq可以输出或忽略文件中的重复行,经常需要使用sort先对文件进行排序,然后使用uniq去重并计数. 2.语法格式 uniq option input uniq 选项 ...
- AOP技术介绍--(AOP技术基础)
2.1 AOP技术起源 AOP技术的诞生并不算晚,早在1990年开始,来自Xerox Palo Alto Research Lab(即PARC)的研究人员就对面向对象思想的局限性进行了分 ...
- 在MySQL登录时出现Access denied for user 'root'@'localhost' (using password: YES) 拒绝访问,并可修改MySQL密码
这两天装了一个mysql 5.7数据库,但是在本地dos登陆不上去,报错Access denied for user 'root'@'localhost'(using password:YES): 也 ...
- luogu2046 海拔
题目链接[NOI2010]海拔 首先有个性质就是海拔只会有\(0\)和\(1\)两种. 证明:海拔下降和人数乘积为总消耗,确定了海拔下降总数,如果有个地方可以使得单位消耗最小,那么全部消耗不会更劣. ...
- 转 Java中wait和sleep方法的区别
1.两者的区别 这两个方法来自不同的类分别是Thread和Object 最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法(锁代码块和方法锁). wait ...