C++字符数组与字符串

C/C++语言的特性:灵活;底层;为什么呢?大概跟数组和指针这两个东西有很大的关系;

作为以C++入门的人来说;我觉得有必要去把这门语言搞清楚;当然了这与我的性格有关系;

所以呢,最近会花时间将C++中的一些特性或者之前没有搞清楚的地方重新梳理一遍;主要面对的是基础语法方面;

单纯的就语法而言,C++说是最难的语言其实是一点都不为过的;

在使用C++写程序的时候,尤其在处理指针数组函数参数这些东西的时候,对于内存的控制很菜;

 

基本概念

字符数组

数组在C++中 是一种符合类型;为什么是复合类型;就是因为数组的定义需要别的内置类型来构建;

字符数组在本质上来说和其他各种类型的数组是没有太大的区别的;就是程序为了存储字符而在内存中开辟的一串连续的内空间;

字符串

字符串是在存储在内存中的连续字节中的一系列字符;

那么由上面的定义中我们就很容易的可以看出字符数组和字符串这两个概念的区别在哪里了;字符数组的概念侧重于描述内存空间;而字符串的概念侧重于描述内存空间的内容——字符串;

从本质上来说,字符串是一种特殊的字符数组,特殊在哪里,后面的内容中会具体说明;

字符数组在前面也说过,和其他的数组没有太大的区别;在这里就不再详细说明,本文章主要说明string的一些特性和处理方法;

在C++中,对于字符串的处理有两种方式:来自C语言的处理方式——C风格的字符串,和C++98中添加的string类;

C类型的字符串及处理方式

C类型的字符串其实就是通过字符数组的方式来处理字符串的;这就是为什么之前说的字符串是一种特殊的字符数组;

它与字符数组不同的地方在于字符串在内存中是以空字符'\0'(asii码中的0)来作为结束标志的,而普通的字符数组我们知道是没有结束标志这个概念的;

空字符

空字符其实就是内存中被设置为0的字节;//在C++中很多的字符串处理函数都是以空字符'\0'来作为结束标志的;

两个声明:

char c_ary1[7]={'h','e','l','l','o','w','\0'}//this is a string 
char c_ary2[7]={'w','o','r','l','d','l','o'}//this is not a string

上面两个声明中,c_ary1是一个字符串,而第二个c_ary2不是;

初始化

字符串初始化的方式较多,使用初始化数组的方式均可初始化字符串,但是有一点需要注意的是在初始化字符串的时候必须为结束标志空字符留出存储位置;

除此之外,还有较为方便的初始化方法:

char str1[20] = "hellow world!";

这种用引号初始化的字符串隐式的包含了结束字符;所以"hellow world!"字符串常量的实际存储长度为14个字节;

用引号括起来的字符串称为字符串常量;

//在这里切勿将概念混淆:

         此处的意思是使用字符串常量初始化字符数组,只是使用了字符串常量中的值,就比如使用数字常量1,2,3来初始化int变量一样;初始化之后的字符串数组仍是可以改变其中的数组值的;并不是将该数组变成了常量数组;

拼接字符串常量

上述使用引号括起来的字符串常量可以直接进行拼接操作;

char str1[20] = "hellow world!""nihao";
cout << str1;

结果:

sizeof()函数和strlen()函数

char str1[20] = "hellow world!""nihao";
	cout << str1;
	cout<<"The length of array is:"<<sizeof(str1);//数组的长度
	cout << "The actual length of string is:"<<strlen(str1);//字符串的实际长度(包括空字符'\0');

运行结果:

string类简介

string类位于std命名空间中;

string类的优点在于:可以将字符串的数组性质隐藏起来;从而使得我们可以像操作变量那样操作字符串;

string类对于字符床的操作如下:

猜你喜欢

转载自blog.csdn.net/qq_42468130/article/details/83827595
今日推荐