C++字符数组函数深度剖析


1、   连接函数strcat

其函数原型为:strcat(char [ ], const char [ ] );

strcat是string catenate(字符串连接)的缩写。该函数有两个字符数组的参数,函数的作用是:将第二个字符数组中的字符串连接到前面字符数组的字符串的后面。第二个自负数组被指定为const,以保证该数组中的内容不会在函数调用期间修改。连接后的字符串放在第一个字符数组中,函数调用后得到的函数值,就是第一个字符数组的地址。

例如:

#include<iostream>

usingnamespace std;

 

int main()

{

  char str1[]="People's Republic of";

  char str2[]="China";

  cout<<strcat(str1,str2);

 

};

输出结果为:Perple’s Republic of China

2、   字符串复制函数

其函数原型为:

strcpy ( char[ ] , const char[ ]);

strcpy是string copy(字符串复制)的缩写。它的作用是将第二个字符数组中的字符串复制到第一个字符数组中去,将第一个字符数组中的相应字符覆盖。

上例如果调用strcpy(str1,str2);执行后,str2中的五个字符“China”和”\0”,共六个字符都会复制到数组str1中。

说明:a、在调用strcpy函数时,第一个参数必须是数组名(如str1),第二个参数可以是字符数组名,也可以是一个字符串常量。

例如:strcpy(str1,”China”);

b、可以用strcpy函数将一个字符串中前若干个字符复制到字符数组中去。

例如:strcpy(str1,str2,2);

作用是将str2中前面两个字符复制到str1中去,然后再加一个’\0’。

C、只能通过调用strcpy函数来实现将一个字符串赋给一个字符数组,而不能用赋值语句将一个字符串常量或字符数组直接赋给一个字符数组。

如下非法:

     str1=”China”;     //不能将一个字符串常量赋给一个字符数组

    str1=str2;   //不能将一个字符数组的内容赋给另一个字符数组

str1代表数组地址,是常量,不能被赋值,不能作左值。

 

3、   字符串比较函数:strcmp

函数原型:strcmp( const char [ ], const char[ ]);

strcmp是string compare(字符串比较)的缩写。作用是比较两个字符串。由于这两个字符数组只参加比较而不应改变其内容,因此两个参数都加上const声明。

如下声明合法:

strcmp(str1,str2);

strcmp(“China”,”Korea”);

strcmp(str1,”Beijing”);

比较的结果由函数值带回。

a、    如果str1=str2,函数值为0。

b、   如果str1>str2,函数值为一正整数。

c、    如果str1<str2,函数值为一负整数。

字符串比较的规则与其他语言中的规则相同,记对两个字符串自左至右逐个自负相比(按ASCII码值大小比较),知道出现不同的字符或遇到’\0’为止。如全部字符相同,则认为相等;若出现不相同的字符,则以第一个不相同的字符的比较结果为准。

不能用以下形式比较:

  if(str1>str2)

   {

     cout<<"yes";

   }

字符数组名str1str2代表数组地址,上面写法表示将两个数组地址进行比较,而不是对数组中的字符串进行比较。应为:

if(strcmp(str1,str2)>0)

   {

     cout<<"yes";

   }

  • 1
  • 2
  • 下一页

相关内容