龙空技术网

「C语言初级」.字符串基本操作之一

计算机科学技术 473

前言:

当前看官们对“c语言复制字符串指针”大致比较注重,大家都需要知道一些“c语言复制字符串指针”的相关资讯。那么小编在网摘上网罗了一些对于“c语言复制字符串指针””的相关知识,希望朋友们能喜欢,你们一起来了解一下吧!

C语言字符串作为一种数据类型,是最为常用的一种操作对象,它的用法和基本类型int、char、double等不太一样,常用的操作也不是+、-、*和/等操作符,而是诸如合并两个字符串为一个新的字符串、将一个字符串删除首部或尾部指定数目的字符、将一个字符串按照指定次数进行合并以及分割字符串为等长的字符串操作,这些操作可以说是与整型的操作符类似,但含义有所改变,下面我们就学习如何实现这几个常用的功能。

在开始学习以上4个字符串操作之前,首先介绍两个重要的概念,一个是逐个字符依次访问字符串,另一个是字符串长度。

逐个地访问字符串中的字符,就是从字符串的起始地址开始,每次将访问的地址向后移动一个单元,我们可以通过一个指针的递增操作符实现,这样就可以访问到新的地址,之后通过指针间接操作符*,就可以访问这个地址所存储的字符了。例如,将指针p指向字符串s的第一个位置,p = s,我们就可以使用*p访问字符串变量s的第一个字符;之后将指针向后移动一位,即指针p递增操作,p++,再通过*p访问的内容就是s字符串中的第2个位置的字符,依次类推,就可以访问字符串中的每一个字符,直到遇到字符串终止符’\0’为止。

字符串的长度,以ASCII字符编码为例,是指这个字符串中所有字符的个数总和。比如:字符串”Live or die?”的长度为12,字符串长度包括引号内的所有字符,当然也包括空格字符和符号字符,如上例中的的两个空格和一个问号字符。我们该如何计算字符串的长度值呢?长度值的计算是通过起始点和终止点,对于字符串来说,就是字符串的起始地址和终止地址,起始地址表示为字符数组的变量名称,终止地址就是特殊字符’\0’所在的地址。如下面的字符串:

图1

我们就可以从第一个字符L开始计数,之后向后移动一个位置,每次移动一个位置,字符的个数加1,直到遇到最后一个字符’\0’为止(’\0’不计入字符串的长度),代码可以这样编写:

图2

图2中第6行代码将指针的值设置为字符数组变量s,即将指针变量p指向了字符串的起始地址,之后将字符串长度计数变量count初始化为0,之后每次递增一个位置,count的值就增1。第8-11行使用了一个循环语句,这个语句的循环终止条件为*p == ‘\0’,即当前的字符为’\0’,如果*p值为其它字母,那么将一直执行代码第9、10行代码,第9行代码递增count的值,第10行递增指针p的值,如果遇到了特殊字符’\0’,那么while循环语句就停止执行,count变量中就记录下字符的个数,即计算出这个字符串的长度。

字符串拼接功能,是指将两个字符串a和b中的字符进行拼接,形成一个新的字符串c。比如:a字符串内容为”abc”,b字符串的内容为”def”,执行字符串拼接后形成的新字符串为”abcdef“。下图3实现了字符串拼接功能,拼接字符串时,原字符串a和b中的数据保持不变,将拼接后的字符串存放至新的位置,字符数组c变量为这个位置的起始地址,需要注意的是:字符数组c所占用的空间大小一定不小于字符串a和b的长度之和再加1(用以存储字符串终止符’\0’)。

图3

在图3的代码中,第19-21行,定义了三个指针,分别指向三个数组a,b和c的首地址,代码第23-27行实现将字符串a中的字符逐个复制到数组c中,代码采用的是通过指针逐个访问字符串a中的字符,并对c数组中的对应位置进行赋值,每次复制一个字符到c数组中;采用同样的方法,代码第29-33行,实现对字符串b中的字符依次复制到数组c中,当前的指针pc在完成对字符串a的复制操作后,位置停留在第4个位置,这样在进行对b字符串进行逐个访问时,新的字符便会追加到已包含a数组数据的c数组的最后。完成对字符串a和b的复制操作后,第35行代码执行了一个赋值操作,将数组c的最后一位设置为’\0’值,即构造称为一个字符串。第37行代码输出了表示a和b字符串合并后的结果。

删除一个字符串首部指定个数的字符是指将一个字符串的最左端的从现有字符串移除,如源字符串”abc efg hijk lmn”,删除首部4个字符后,新的字符串变为了”efg hijk lmn”。如何进行操作呢?我们只需要将第4个位置后的所有字符依次向前移动4个位置就可以。

图4

图4代码中,第41行将指针ps指向第5个元素’e’所对应的地址,第42行代码将指针ps0执行原字符串的首地址。通过第43-47行代码中的循环语句,依次将第5个位置之后的代码前移4个位置,即’e’移至0位置,‘f’移至1位置,‘g’移至2位置……,最后将’n’移至11位置,代码第44行实现此功能,第45行代码是将新字符串的指针向后移动一个位置,第46行代码是将旧字符串的指针向后移动一个位置,即两个指针始终保持距离为4的偏移,最终实现移动所有字符。第49行代码是将字符出终止符添加到末尾,形成一个新的字符串。这样就完成了从起始位置删除4个字符的功能。

如何删除字符串尾部指定数目的字符呢?见《字符串基本操作之二》

标签: #c语言复制字符串指针 #c语言字符型是什么意思 #c语言从键盘输入字符串 #用c语言编写字符串复制函数的方法 #c语言判断字符串是否包含子字符串