简要介绍
串(String)是由零个或多个字符组成的有限序列,是计算机科学中常见的数据类型之一。在C语言中,字符串以字符数组的形式存储,以空字符 '\0' 结尾,表示字符串的结束。
串的存储结构和特点
-
存储结构
- 串的存储结构通常使用字符数组来表示,以 '\0' 结尾标志字符串的结束。
- C语言中使用字符数组来存储串,例如
char str[MAX_SIZE]
,其中MAX_SIZE
为数组的最大容量。
-
特点
- 串的长度可变,可以为空串(即长度为0的串)。
- 串中的字符有序排列。
- 串中的字符可以重复。
使用C语言实现基本操作
字符串截取
bool SubString(SString &Sub,SString S,int pos,int len){
//字串范围越界
if(pos+len-1>S.length){
return false;
}
for(int i=pos;i<pos+len;i++){
Sub.ch[i-pos+1]=S.ch[i];
}
Sub.length=len;
return true;
}
字符串比较
int StrCompare(SString S,SString T){
for(int i=1;i<=S.length;i++){
if(S.ch[i]!=T.ch[i]){
return S.ch[i]-T.ch[i];
}
}
//扫描完毕字符串都相同,比较字符串的长度
return S.length-T.length;
}
定位操作
int Index(SString S,SString T) {
int i=1,n=StrLength(S),m=StrLength(T);
SString sub;//暂存字串
while(i<=n-m+1){
SubString(sub,S,i,m);
if(StrCompare(sub,T)!=0)
++i;
else return i;//返回在主串中的位置
}
return 0;//主串中不存在和字串相同的字符串
}
小结
代码完整实现
#include<stdio.h>
#include<stdlib.h>
#define MAXLEN 255
typedef struct {
char ch[MAXLEN];
int length;
}SString;
// 求子串,字符串截取
bool SubString(SString &Sub,SString S,int pos,int len){
//字串范围越界
if(pos+len-1>S.length){
return false;
}
for(int i=pos;i<pos+len;i++){
Sub.ch[i-pos+1]=S.ch[i];
}
Sub.length=len;
return true;
}
//字符串比较
int StrCompare(SString S,SString T){
for(int i=1;i<=S.length;i++){
if(S.ch[i]!=T.ch[i]){
return S.ch[i]-T.ch[i];
}
}
//扫描完毕字符串都相同,比较字符串的长度
return S.length-T.length;
}
//定位操作
int Index(SString S,SString T) {
int i=1,n=StrLength(S),m=StrLength(T);
SString sub;//暂存字串
while(i<=n-m+1){
SubString(sub,S,i,m);
if(StrCompare(sub,T)!=0)
++i;
else return i;//返回在主串中的位置
}
return 0;//主串中不存在和字串相同的字符串
}