`

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";

}

4、 字符串长度函数strlen

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

strlen是string length(字符串长度)的缩写。它是测试字符串长度的函数。其函数的值为字符串中的实际长度,不包括’\0’在内。

例如:char str[10] = “China”;cout<<strlen(str);

 

 

应用举例:

通过函数调用求三个字符串的最大值:

可以用一个函数max_string来找出n个字符串中的最大者。在main函数中设一个二维的字符数组str,大小为3*30,即三行30列,每行可以容纳30个字符。可以把str[0],str[1],str[2]看作三个一维字符数组,它们各有30个元素。可以把它们如同一维数组那样进行处理。可以用cin分别读入3个字符串。然后调用max_string函数可以得到最大的字符串,把它放在一维字符数组string中,在函数max_string中输出最大的字符串。程序如下:

 

 

//============================================================================

// Name : C++_array.cpp

// Author : yangbo_hbzjk

// Version :

// Copyright : Your copyright notice

// Description : Hello World in C++, Ansi-style

//============================================================================

#include <iostream>

#include <string>

using namespace std;

 

int main()

{

void max_string(char str[][30],int i); //函数声明

int i;

char coutry_name[3][30];

for(i=0;i<3;i++)

{

cin>>coutry_name[i]; //输入三个国家名

}

max_string(coutry_name,3); //调用max_string函数

return 0;

};

 

void max_string(char str[][30],int n)

{

int i;

char string[30];

strcpy(string ,str[0]); //使string的值为str[0]的值

for(i=0;i<n;i++)

{

if(strcmp(str[i],string)>0) //如果str[i]>string

{

strcpy(string,str[i]); //将str[i]中的字符串复制到string

}

cout<<endl<<"the largest string is:"<<string<<endl;

}

}

 

分享到:
评论

相关推荐

    区块链技术深度剖析-第二讲编程基础

    ### 区块链技术深度剖析—第二讲编程基础 #### 一、字节序 **1.1 字节序概述** 字节序是指多字节数据在计算机内存中存储或在网络传输时各字节的存储顺序。理解字节序对于进行网络通信、文件读写以及数据结构设计...

    C_C++常见面试题深入剖析

    字符串复制函数`strcpy`的深度剖析 #### (1) 基础理解与常见错误 `strcpy`函数用于复制一个字符串到另一个字符串中,但使用不当极易导致缓冲区溢出。例如,试题1中,试图将长度为10的字符串`"0123456789"`复制到...

    C,C++程序员应聘常见面试试题剖析(超级详细解析).doc

    这些题目不仅考察了对字符串处理函数如`strcpy`、`strlen`的理解,还测试了程序员对数组边界安全的敏感度。 二、`strcpy`函数的实现 面试中,有时会要求面试者实现`strcpy`函数,以此评估其编程技巧和对C语言本质...

    c语言深度剖析(学习资料)

    3. **数组与字符串**:数组是存储同类型数据的集合,字符串则是一种特殊的字符数组。本书将阐述数组的声明、初始化、访问及操作,以及字符串处理函数的使用,如strcpy、strcat、strcmp等。 4. **结构体与联合体**:...

    C、C++面试深入剖析

    面试者需要理解字符数组与字符串的区别,并能够识别出这种潜在的逻辑错误。如果面试者能指出strcpy(string, str1)可能导致的不确定性,即因str1未定义为字符串而产生的不可预知行为,那么他的理解已经相当深入。 ...

    C、C++程序员应聘常见面试题深入剖析

    试题2中,面试者需要理解字符数组的动态特性。在初始化str1时,虽然它被赋值为10个'a',但由于缺少终止符'\0',strcpy函数可能会无限复制,造成栈溢出。对于这种问题,面试者不仅要指出问题所在,还要了解strcpy的...

    CC++程序设计员应聘常见面试试题深入剖析

    这里考查的是对字符数组初始化的理解和strcpy函数的使用。字符数组str1的初始化方法是错误的,应使用字符字面量`'a'`而非整型数值`'a'`。此外,strcpy的调用可能导致复制不确定数量的字节,因为str1的长度未明确。 ...

    C、C++程序员常见面试题深入剖析.pdf

    - **指针与数组**:`strcpy`函数涉及到指针操作,源字符串和目标字符串都是通过指针传递。面试题中提到了数组越界问题,这是C/C++编程中常见的错误来源,需要对数组大小有清晰的认识。 - **const关键字**:在函数...

    c++ 各权威公司面试题

    《C++面试题解析:深度剖析strcpy函数与内存安全》 C++面试中,考察面试者的技术水平往往从基础开始,而基础中的基础莫过于对字符串处理的理解,特别是经典的strcpy函数。本文将通过分析一系列面试题,揭示其中的...

    深度剖析C编程 初级+中级+高级 基础+数据结构源码+组成原理+操作系统及C语言高级.zip

    字符数组9 gets与puts-str系列-指针本质10 讲解-指针的传递与偏移11 指针与一维数组及malloc动态申请空间12 指针-函数-递归调用-全局变量二.中级阶段:王道数据结构源码实战:1.结构体与结构体指针2.typedef-C++引用...

    C++程序设计员应聘常见面试试题深入剖析

    在题目2中,`str1`数组内的赋值操作不正确,应当使用`str1[i] = 'a'`,此题主要测试面试者对字符数组的理解。题目3中,`strlen`函数计算字符串长度时不包括末尾的`\0`,因此条件判断应为`strlen(str1) ,这考察了...

    C/C++ 程序设计员应聘常见面试笔试试题深入剖析

    2. 题目2中,面试者需要意识到在循环中对字符数组赋值应使用`str1[i] = 'a'`而不是`str1 = 'a'`,前者是对元素的赋值,后者是非法的。 3. 题目3中,面试者需要注意到`strlen`函数不包含字符串末尾的`\0`,因此判断...

    C/C++ 程序设计员应聘常见面试试题深入剖析

    由于`str1`是一个长度为10的字符数组,但包含了11个字符(包括结束符`\0`),因此在执行`strcpy`时会导致`string`数组越界,这是非常危险的内存错误。 - **试题2**:面试者需要识别`str1`中的字符赋值问题。循环中`...

    C++程序设计员应聘常见面试试题剖析

    题目2,void test2()中,面试者不仅要指出字符数组str1不能在数组内结束,还要理解strcpy(string, str1)可能导致的不确定复制字节数,这是对strcpy工作原理的了解。如果能进一步阐述strcpy函数的执行方式,可以得到...

Global site tag (gtag.js) - Google Analytics