微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 周立功《程序设计与数据结构》:字符串函数

周立功《程序设计与数据结构》:字符串函数

时间:08-05 来源:ZLG致远电子 点击:

本文为程序设计基础,本文为1.8.2  字符串常量第三点:字符串函数。

 

>>>>

1. 字符串函数

 

标准C提供了一个操作字符串的接口string.h,其中的很多函数是有特殊用途的,下面将详细介绍通过string.h导出的最重要的函数原型。

 

strlen()函数 

 

strlen()函数用于统计字符串的长度,其函数原型如下:

size_t strlen(const char *s);

// 前置条件:s是一个以null结尾的字符串

// 后置条件:返回值为s中的字符个数(不包括null字符)

 

下面的函数可以缩短字符串的长度,其中用到了strlen()。即:

1     void fit(char *string, unsigned int size)

2     {

3            if(strlen(string) > size) 

4                   strlen[size] = '\0';

5     }

 

由于该函数要改变字符串,因此函数在声明形参string时没有使用const限定符。当然,也可以调用strlen(s)确定字符串s的长度,或用if语句比较两个字符串是否相等。即:

if(strcmp(s1, s2) == 0) … 

 

strcat()函数

 

用于拼接字符串的strcat()函数接受两个字符串作为参数,其函数原型如下:

char *strcat(char *s1, char const *s2);

// 前置条件:s2是一个以null结尾的字符串,s1数组的末尾还有足够的空间容纳s2的一个副本

// 后置条件:s2被连接到s1中,且返回值是一个指针,该指针指向s1数组的第一个字符

 

该函数将第2个字符串的备份附加在第1个字符串末尾,s2字符串的第1个字符将覆盖s1字符串末尾的空字符,并将拼接后的新字符串作为第1个字符串返回,第2个字符串不变。strcat()函数的类型是char *(即指向char的指针),strcat()函数返回第1个参数,即拼接第2个字符串后的第1个字符串的地址。

 

由于strcat()函数无法检查第1个数组是否能够容纳第2个字符串,如果分配给第1个数组的空间不够大,那么多出来的字符溢出到相邻存储单元时就会出问题,当然也可以用strlen()查看第1个数组的长度。注意,要给拼接后的字符串长度加1才够空间存放末尾的空字符。或者用strncat(),该函数的第3个参数指定了添加的最大字符数,其函数原型如下:

char *strncat(char *s1, char const *s2, size_t n);

 

该函数将s2字符串中的n个字符拷贝到s1字符串末尾,s2字符串中的第1个字符将覆盖s1字符串末尾的空字符。不会拷贝s2字符串中的空字符和其后的字符,并在拷贝字符的末尾添加一个空字符,该函数返回s1。

 

strcmp()函数和strncmp()函数

 

strcmp()函数要比较的是字符串的内容,不是字符串的地址,其函数原型如下:

int strcmp(char const *s1, char const *s2); 

// 前置条件:s1和s2都是以null结尾的字符串

// 后置条件:返回值为0,表示s1=s2;

//              返回值小于0,表示s1在词典顺序上位于s2之前;

//              返回值大于0,表示s1在词典顺序上位于s2之后

 

如果s1字符串在机器排序序列中位于s2字符串的后面,该函数返回一个正数;如果两个字符串相等,则返回0;如果s1字符串在机器排序序列中位于s2字符串的前面,则返回一个负数。strcmp()函数比较的是字符串("hello")不是字符('q'),所以其参数应该是字符串。由于char的类型实际上是整数类型,因此可以使用关系运算符比较字符。如果两个字符串开始的几个字符都相同会怎样?strcmp()会依次比较每个字符,直到发现第1对不同的字符为止,然后返回相应的值。比如,"apples"和"apple"只有最后一对字符不一样("apples"的s和"apple"的空字符),由于空字符在ASCII中排第1,字符s一定在它后面,所以strcmp()返回一个正数。

 

最后一个例子,strcmp()比较所有的字符,不只

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top