串,即是字符串(String),,同样是特殊的线性表。是由n多个char类型组成的。不过,String在c语言里,不是作为关键字的(即是,没有这个类型)只有像Java,才有将String作为一个数据结构。c中,一般使用char * 作为String的形式。不过,这只是String的一种存储结构的体现。下面详述。
串到的长度是按切切实实存在的char型来算的,‘\n’在这里不算入长度(但是应该还是会占据空间)。仅含有空格字符的串称为空格串(Blank String),为表示清楚,书写时用‘Φ’来替换,但是实际写代码时,还是使用空格的哈。
串的主要运算,就是以下了:
(因为这一节比较简单,如果做链式结构的String的话,就是代码相当于之前的链表那一节,所以不写代码了)
StriAssign() 串的赋值
StrConcat() 串的串接,又称并置
StrLen() 求串长
StrSub() 求在串里截取子串
StrIndex() 求子串在主串中序号
StrEqual() 判断两个串的内容是否相同
StrReplace() 置换运算
StrCmp() 两串的比较
StrEmpty() 判断串是否为空
(这些函数,有一些是函数库/头文件有现成的函数可以使用了,需要使用的话,先去一下相应的头文件)
串的存储结构:
串有三种存储形式:
定长顺序存储结构:就是char string[12] = {‘a’,‘b’,‘c’}这一种类型的。
堆分配存储结构:仍然是像定长一样,用一组连续的存储单元来一次存储串的字符序列。但串的存储空间是在程序运行时根据串的实际长度来动态分配的,可以算是动态分配。。即char * string = “abcde”
块链存储结构:即是链式存储,不过每个结点不一定只存一个char。,可以设置一个定长,存多个。
不过放下c语言的String的一些测试吧:
(之前考c,总是很混乱。不过理解原理,基本就可以记住)
#include<stdio.h>
int main()
{
//初始化字符串
char * StringArray1 = "dafg3afag";
char * StringArray2 = "scanfzzzzzzh";
//打印整个字符串
printf("string1 = %s,string2 = %s\n",StringArray1,StringArray2);
//打印字符串长度
printf("length 1 = %d,length 2 = %d\n",strlen(StringArray1),strlen(StringArray2));
//打印字符指针指向的那个字符的存储大小
printf("sizeof char 1 is %d,sizeof char 2 is %d\n",sizeof(* StringArray1),sizeof(* StringArray2));
//打印字符指针的存储大小
printf("pointer 1 = %d,pointer 2 = %d\n",sizeof(StringArray1),sizeof(StringArray2));
//单个打印string里的其他位置的元素
printf("StringArray1[2] = %c,StringArray2[2] = %c\n",StringArray1[2],StringArray2[2]);
//另外一个方式,打印其他位置的元素
printf("*(StringArray1+8) = %c,*(StringArray2+8) = %c\n",*(StringArray1+8),*(StringArray2+8));
//从其他位置,打印字符串到结束
printf("StringArray1+1 = %s,StringArray2+1 = %s\n",StringArray1+1,StringArray2+1);
//这种方式是不可行的
//printf("%s,%s\n",StringArray1[1],StringArray2[1]);
return 0;
}
附图: