串
- 串其实就是字符串,在c语言中头文件 #include 就包含了对其的大部分操作
- 大话数据结构上列出了对串的一些基本函数操作,将字符数组的第一个位置存储为整个字符串的长度,但我没有那么写,而是按一般思维就直接将字符串直接存入数组
代码实现
#include
#include
#define MAX 40
bool StrAssign(char Main_S[],char* chars);
void StrCopy(char Main_S[],char Main_F[]);
bool StrEmpty(char Main_S[]);
void StrClear(char Main_S[]);
int StrCompare(char Main_S[],char T[]);
int StrLength(char S[]);
bool Concat(char T[],char S1[],char S2[]);
bool SubString(char sub[],char Main_S[],int pos,int len);
int Index(char Main_S[],char T[],int pos);
bool StrInsert(char S[],int pos,char T[]);
bool StrDelete(char S[],int pos,char len);
bool Replace(char S[],char T[],char V[]);
void StrPrint(char H[]);
int main(){
char Main_S[MAX],sub[MAX];
char chars[MAX]="ABCCBAACBAACABBA";
char Main_F[MAX]="ABCCBAACBAACABBF";
char T[MAX]="AACBAA";
char Y[MAX]="AA";
char H[MAX]="aa";
char S1[MAX]="woyidingyaobiandecholihai";
char S2[MAX]="zuizhongyaodeshipingpinganan";
int len,c,pos,f;
StrClear(Main_S);
if(StrEmpty(Main_S)){
printf("是空串!\n");
}
if(StrAssign(Main_S,chars)){
printf("%s\n",Main_S);
}
else
printf("生成串失败!\n");
StrCopy(Main_S,Main_F);
printf("复制成功后的主串是:%s\n",Main_S);
c=StrCompare(Main_S,T);
if(c<0){
printf("第一个串比第二个串小\n");
}
else if(c==0){
printf("第一个串等于第二个串\n");
}
else if(c>0){
printf("第一个串比第二个串大\n");
}
len=StrLength(Main_S);
printf("串的长度是:%d\n",len);
if(Replace(Main_S,Y,H)){
printf("替换成功!替换后的串为:%s\n",Main_S);
}
else
printf("替换失败!\n");
StrPrint(Y);
}
bool StrAssign(char Main_S[],char* chars){
int i;
if(StrLength(chars)>MAX)
return false;
else{
for(i=0;i<=StrLength(chars);i++)
Main_S[i]=*(chars+i);
return true;
}
}
void StrCopy(char Main_S[],char Main_F[]){
int i;
for(i=0;i<=StrLength(Main_F);i++)
Main_S[i]=Main_F[i];
}
bool StrEmpty(char Main_S[]){
int i;
i=StrLength(Main_S);
if(i==0)
return true;
else
return false;
}
void StrClear(char Main_S[]){
Main_S[0]='\0';
}
int StrCompare(char Main_S[],char T[]){
int m=StrLength(Main_S);
int n=StrLength(T);
int i;
for(i=0;i<=n&&i<=m;i++){
if(Main_S[i]!=T[i])
return Main_S[i]-T[i];
}
return m-n;
}
int StrLength(char S[]){
int i=0;
while(S[i]!='\0')
i++;
return i;
}
bool Concat(char T[],char S1[],char S2[]){
int i;
if(StrLength(S1)+StrLength(S2)<=MAX){
for(i=0;i<=StrLength(S1);i++)
T[i]=S1[i];
for(i=0;i<=StrLength(S2);i++)
T[StrLength(S1)+i]=S2[i];
return true;
}
else{
for(i=0;i<=StrLength(S1);i++)
T[i]=S1[i];
for(i=0;i<=MAX-StrLength(S1);i++)
T[StrLength(S1)+i]=S2[i];
T[MAX-1]='\0';
return false;
}
}
bool SubString(char sub[],char Main_S[],int pos,int len){
int i;
if(pos<0||pos>StrLength(Main_S)||len<0||len>StrLength(Main_S)-pos+1)
return false;
for(i=0;i<len;i++)
sub[i]=Main_S[pos-1+i];
return true;
}
int Index(char Main_S[],char T[],int pos){
int i,j;
if(pos>=1&&pos<StrLength(Main_S)){
i=pos-1;
j=0;
while(i<StrLength(Main_S)&&j<StrLength(T)){
if(Main_S[i]==T[j]){
i++;
j++;
}
else{
i=i-j+1;
j=0;
}
}
if(j==StrLength(T))
return i-StrLength(T)+1;
else
return 0;
}
else
return 0;
}
bool StrInsert(char S[],int pos,char T[]){
int i;
if(pos<0||pos>StrLength(S))
return false;
if(StrLength(S)+StrLength(T)<=MAX){
for(i=StrLength(S);i>=pos;i--)
S[i+StrLength(T)]=S[i];
for(i=pos;i<pos+StrLength(T);i++)
S[i]=T[i-pos];
return true;
}
else{
for(i=MAX;i>=pos+StrLength(T);i--)
S[i]=S[i-StrLength(T)];
for(i=pos;i<pos+StrLength(T)&&i<=MAX;i++)
S[i]=T[i-pos];
return false;
}
}
bool StrDelete(char S[],int pos,char len){
int i;
if(pos<0||pos>StrLength(S)-len||len<0)
return false;
for(i=pos+len;i<=StrLength(S);i++)
S[i-len]=S[i];
return true;
}
bool Replace(char S[],char T[],char V[]){
int i=1;
if(StrEmpty(T))
return false;
do{
i=Index(S,T,i);
if(i){
StrDelete(S,i-1,StrLength(T));
if(!StrInsert(S,i-1,V))
return false;
i+=StrLength(V);
}
} while(i);
return true;
}
void StrPrint(char H[]){
int i;
for(i=0;i<=StrLength(H);i++)
printf("%c",H[i]);
printf("\n");
}