宝塔服务器面板,一键全能部署及管理,送你10850元礼包,点我领取

今天我们先介绍循环队列的实现和常见操作,然后介绍几个字符串处理函数。后面每篇文章都会介绍C库中的一些函数,因为多了解一些C库中的函数是非常重要的。

字符串比较函数strcmp(c语言strlen函数用法)-风君子博客

一、循环排队:

循环列表中的元素在内存中也是连续的。与最后一部分的非循环队列相比,当队列头删除数据元素时,前面的空间可以继续使用。那么如何实现循环队列呢?我们学过一个叫做模运算的运算,其中的运算符是%,比如z=x%y,z是x除以y得到的余数,它有一个特点,z的最大值只能是y-1,z的取值范围是0~y-1,所以我们可以利用这个性质来实现循环。

首先,我们将循环队列的结构定义如下:

字符串比较函数strcmp(c语言strlen函数用法)-风君子博客

循环队列结构

ElemT是由#define定义的宏,可以是整数、字符或结构类型。

1.循环队列初始化:

先看示意图:

字符串比较函数strcmp(c语言strlen函数用法)-风君子博客

循环队列初始化示意图

其实记忆并不是真的戒指,而是我们假设的,这就把问题说清楚了。首先,我们需要分配一个连续的内存作为队列,然后将头尾索引设置为0,得到如下初始化函数:

字符串比较函数strcmp(c语言strlen函数用法)-风君子博客

正在初始化循环队列

这个函数是按照上图写的。

2.添加元素:

首先,我们来看一下示意图:

字符串比较函数strcmp(c语言strlen函数用法)-风君子博客

添加元素图

这里有一个完整的判断。以后==前来判断显然是不合适的,因为队列为空时也是如此。如果队列已满,从上图可以看出,前面一定比read领先一个空格,但只要判断后置1等于前置?显然,如上图后方所示:后方1=(n-1) 1=n,不等于前方,但发现它们相对于初始空间长度(n)的模结果是相等的,所以如果循环队列已满,则可以通过(后方1)%n的值是否等于前方来判断队列是否已满,这样就得到元素相加的函数如下:

字符串比较函数strcmp(c语言strlen函数用法)-风君子博客

循环队列添加元素

从上面的分析我们知道,循环队列一次只能添加的数据取决于初始分配的内存空间的长度,但只要在添加时从头开始取元素,就可以永远回收,不会满。这很好,让你觉得空间是取之不尽用之不竭的,但这只是你的错觉。

3.删除数据元素:

我们先看示意图,如下:

字符串比较函数strcmp(c语言strlen函数用法)-风君子博客

删除数据示意图

我们可以看到,如果我们追到顶,那么队列就没有数据可拿,那么就会是空的,需要继续添加数据才能继续删除。因此,队列是否为空可以通过前面是否等于后面来确定。如果没有,我们将继续通过循环模来改变front的值,因此我们得到以下函数来删除读取的数据元素:

字符串比较函数strcmp(c语言strlen函数用法)-风君子博客

删除元素

这个分析就简单多了。上述三种队列各有优势,应根据实际需要选择。到目前为止,这是关于队列的简单介绍。

二、字符串处理功能:

1.stpcpy函数:

一般形式是:

char * strpcpy(char * dest,const char * s);

函数:将字符串复制到数组中。

参数:dest是目标数组,s是要复制的字符串。

这个函数是用字符串表示的

请注意,它不是标准函数。这个函数不能在VC 6.0中使用。但是可以使用Turbo2.0。

此函数返回指向目标数组的指针,例如:

char ch[100];

char * pc=ch

PC=strpcpy(PC,’ i lov

e you”);

printf(“%s”,pc);

你会发现输出控制台上并没有输出i love you,而是啥都没有,为什么是这样呢?因为pc指针指向改变了,并不是指向ch数组的首地址了,而是指向i love you后面的地址,因此jmdyd在次使用该函数时,之前的数据并不会被覆盖,因此你只有使用ch输出,或者给pc重新赋值。

2、strcpy函数:

其一般形式如下:

char *strcpy(char *dest,const char *s);

作用:将字符串赋值到数组。

参数:dest为目标字符数组,s为需要复制的字符串。

返回值:dest数组的首地址。

字符串比较函数strcmp(c语言strlen函数用法)-风君子博客

范例

运行结果:i love you!

i like you!

可以看出该函数并不像上面那函数一样,当第二次调用时会覆盖掉之前的数据,这应当注意。

注意:目标字符数组要足够容纳,需要复制的字符串,否则程序会出现溢出异常,导致程序出错崩溃。

3、strlen函数:

其一般形式为:

int strlen(const char *s);

作用:计算字符串s的长度。

参数为要计算长度的字符串。

返回值:返回字符串s的长度。

范例:

字符串比较函数strcmp(c语言strlen函数用法)-风君子博客

范例

运行结果10。

strlen函数是以’\0’为结束标志的,比如char ch[100],strlen(ch),它的值是不定的,还有如果ch[100]=”i love you”;strlen(ch),结果也是不定的,不同编译器运行的结果可能有所不同,要是编译器在’y’字符后立马添上一个’\0’,那么结果就是正确的,要是没有立马那么结果就是错误的,因为strlen只以’\0’字符作为标准,计算字符串的长度。

4、strlwr函数:

其一般形式:

char *strlwr(char *s)。

作用:将参数s转换为小写。

返回值:将转换后的s返回,是指向s的指针。

范例:

字符串比较函数strcmp(c语言strlen函数用法)-风君子博客

范例

运行结果:i love you!

注意:strlwr函数它是只能操作字符数组的,不能操作字符串常量,也不能操作指针指向的字符串常量,如char *ch=”I LOVE YOU”;strlwr(ch),这句是错误的,因为看过我前面写过的文章的,要是留意,就会知道,字符串常量它是作为常量存储在静态存储区域的,因此不能被修改。

今天我们暂时就介绍到这里,明天会继续介绍一点数据结构知识已经一些库函数,毕竟每天积累一点也是好的,你们说是不是!