C风格字符串&string类型

1.字符串常量、C风格字符串

1.1 字符串常量是一个const char类型的数组,例如

"i am a string"

该字符串常量在数组中以空字符'\0'结尾。

当这样的字符串出现在程序中时,实际上是通过字符指针 char* 访问该字符串的,字符指针char*总是指向字符串常量的第一个字符。


1.2 我们来分析下面的程序片段

char *pmessage;

pmessage="now is the time"; //C风格字符串

该程序首先分配了16个char型的连续内存空间,分别初始化为'n','o','w',‘ ’,'i','s',' ','t','h','e',' ','t','i','m','e','\0',然后用一个字符型指针char*指向这段内存空间的第一个字符空间,也就是指向'n',该字符指针名为pmessage。在这个过程中并没有字符串的复制,只涉及到指针的操作

这里的“now is the time\0”就是一个C风格字符串,其本质是以'\0'结束的字符数组。


1.3 下面有两种有关字符串常量的初始化,注意两者之间的区别

char amesssage[]="now is the time";

//这里的amessage[]是一个字符数组,所以也就意味着可以通过 amessage[1]='z' 来对该字符串中的单个字符进行修改,修改后的结果是"nzw is the time"。amessage可以看做一个始终指向&amessage[0]的指针。


char *pmessage="now is the time";

cout<<pemssage[1]; //输出'o'

cout<<*(pemssage+2); //输出'w'

//这里的pmessage是一个指针,其初始值是一个字符串常量,pmessage可以修改指向其他的地址,但是无法修改“now is the time”这个字符串的内容。



1.4 一些关于C风格字符串的操作,在C++中需要包含头文件<cstring>,在C中需要包含头文件<string.h>

strlen(s)  //返回s长度,该长度不包括字符串终止符'\0'

strcmp(s1,s2)

strcat(s1,s2)

strcpy(s1,s2)

strncat(s1,s2,n)

strncpy(s1,s2,n)


1.5 关于C风格字符串中>,<,==运算符的运用,我们来看下面的举例

string s1="she is a good girl";

char *cp1=s1;

char *cp2=s1;

if(cp1<cp2) //这里比较的是cp1和cp2的地址,而且必须在cp1和cp2指向同一个字符串数组时才有意义

......



string ss1="she is a good girl";

string ss2="she is a bad girl";

if(ss1>ss2) //这里比较的是ss1和ss2的字符串ASCII码值,即比较的字符串大小

......


1.6 C风格字符串的两种初始化方法

(1) 

char *cp1="hello world";

const char *cp2="hello sea";

(2)在不知道字符串长度的情况下,可以申请动态内存(new),使用完成后再释放([]delete)。

const int len=100;

char *cp3=new char[len];

cin>>cp3; //从标准输入字符串,字符串长度不能超过100


2. string类型,#include <string>

注意:C语言中没有string类型

一些相关操作

s.empty()

s.size()

s[n] //返回s中第n位的字符


string 对象中对单个字符的处理,引入头文件<cctype>


【欢迎读者交流批评指正~】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值