字符串数组和字符串,字符串数组与字符串
char acStr[]= aaaaa ;//这是一个字符数组,只包含5个字符
char * pcStr= aaaaa//这是一个包含6个字符的字符串,即5个A加上一个终止符
输出结果strlen()的长度为5,所以即使是字符串,最后取长度时,也不考虑用 : strlen()计算字符串的长度,并忽略终止符 。
char * p= hello
char * q= world
char o[]= hello ;
cout hello strlen(p)endl;//5
cout world strlen(q)endl;//5
cout o[] strlen(o)endl;//5
cout strlen( hello )endl;//5
1.字符串实际上比字符数组多了一个空间来存储终止符
char * p= hello
char * q= world//例如,world实际存储6个字符位和5个字符
但是对于长度,返回值仍然是5:不考虑终止符 的位。
cout hello strlen(p)endl;
cout world strlen(q)endl;
2.字符数组中不需要存储 位,所以分配的字符数只需要给strlen(p)而不是1:
a[0]=新字符[strlen(p)];
a[1]=新字符[strlen(q)];
字符数组和字符指针变量都可以实现字符串的存储和操作。但这两者是有区别的。使用时应注意以下问题:
1.字符串指针变量本身是一个用来存储字符串第一个地址的变量。字符串本身存储在一个连续的内存空间中,以第一个地址作为头,以 0 作为字符串的结尾。一个数组由几个数组元素组成,可以用来存储整个字符串。
2.对于字符数组的初始化赋值,必须采用外部类型或者静态类型,比如static charst[]={ " c language " };而字符串指针变量就没有这种限制,比如char *ps=C语言;
3.字符串指针模式的char * PS=“C语言”;可以写成:char * psps=C语言;对于阵列模式:
static char st[]={C语言 };
它不能写成:
char ST[20];st={C语言 };
只能给字符数组的每个元素逐个赋值。
从以上几点可以看出字符串指针变量和字符数组的区别,使用指针变量更方便。如前所述,在获得明确的地址之前使用指针变量是很危险的,而且很容易导致错误。但是可以直接给指针变量赋值。因为C系统在给指针变量赋值的时候要给一个明确的地址。因此,
char * ps= C Langage
或者char * ps
ps=C语言;都是合法的。
C++提供了两种字符串表示形式:C风格的字符串和标准c++引入的字符串类类型。建议使用string类。
1.c样式字符串
字符串存储在字符数组中,通常由char *类型的指针操作。然而,系统内部实际上存储在一个字符串数组中。然后,st指向数组的第一个元素:
Char * st=" hello world
常用的指针算术运算是用来遍历C风格的字符串,每次指针加1,直到一个空字符:
While(*st ){…}
当包含:# includechstring.h
//返回长度
int strlen(const char *);
//比较两个字符串是否相等
Int strcmp(const char*,const char *);
//下面两个的用法不清楚
//将第二个字符复制到第一个字符
Char *strcpy(char *,const char *);
//第二个字符后跟第一个字符
Char *strcat(char*,const char *);
C样式字符串的长度可以是0。有两种方法:
char * pc1=0;
Char * pc=
//temp设置避免更改p的值;
//而p不能是常数,因为它会被函数strcat()重置;
char *p=Hello world!,* temp=p;
“很高兴见到你!”;
cout p q endl
cout *p , *(Q1)endl;
p=温度;
cout p由:n 制成;
for(int I=0;I strlen(p);我)
cout * temp endl
}
2.字符串类型
c标准库支持这一点。
要使用string类,必须包含头文件:
#包含字符串
string ST(" Hello world ");
//返回长度(不带空字符)
ST . size();
字符串st2
//检查它是否为空。
St2.empty()=true或false
//复制两个字符串
字符串st3(ST);
St2=st3//简单
//比较它们是否相等
If(st2==st3){…}
//两个字符串连接成第三个字符串
字符串s1("hello,");
字符串s2("世界!");
字符串s3=s1 s2
//或者,直接加到s1
S1=S2;
//您可以将C样式的字符串转换为字符串类对象
Const char * pc=" a try
字符串s1=pc//好的
//但是,反向转换不能自动执行。
Char * str=s1//错误
要实现这种转换,必须显示一个名为c_str()的调用。
//几乎正确
char * str=S1 . c _ str();
但是为了防止字符数组被程序直接处理,c-str()返回的常量数组的指针:constchar *。STR被定义为非常数指针,所以是非法的。正确:
const char * str=S1 . c _ str();//好的
类型字符串支持通过下标操作符访问单个字符。
第一个问题是可读性,也就是512是什么意思?第二个问题是可维护性,比如多次修改会陷入困境。
Const int bufsize=512
for(int index=0;索引bufsize索引)
Const类型限定符提供了一种将对象(变量)转换为常量的解决方案。任何试图在程序中改变这个值的行为都会导致编译错误,所以它被称为只读。
此外,常量在定义后必须初始化,因为它们不能被修改。