字符串数组和字符串,字符串数组与字符串

  字符串数组和字符串,字符串数组与字符串

  char acStr[]= aaaaa ;//这是一个字符数组,只包含5个字符

  char * pcStr= aaaaa//这是一个包含6个字符的字符串,即5个A加上一个终止符 \0

  输出结果strlen()的长度为5,所以即使是字符串,最后取长度时,也不考虑用\0: strlen()计算字符串的长度,并忽略终止符\0。

  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.字符串实际上比字符数组多了一个空间来存储终止符\0

  char * p= hello

  char * q= world//例如,world实际存储6个字符位和5个字符 \0

  但是对于长度,返回值仍然是5:不考虑终止符\0的位。

  cout hello strlen(p)endl;

  cout world strlen(q)endl;

  2.字符数组中不需要存储\0位,所以分配的字符数只需要给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类型限定符提供了一种将对象(变量)转换为常量的解决方案。任何试图在程序中改变这个值的行为都会导致编译错误,所以它被称为只读。

  此外,常量在定义后必须初始化,因为它们不能被修改。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: