您现在的位置是:主页 > news > 建设银行纪念币网站/石家庄疫情最新情况

建设银行纪念币网站/石家庄疫情最新情况

admin2025/5/2 18:48:02news

简介建设银行纪念币网站,石家庄疫情最新情况,美女做暧暧网站,中江建设银行网站一、代码如下 /* 项目名称:串的堆分配存储表示编译环境:VC 2008作者相关:。。。最后修改:2019.10.01学习目标:赋值、复制、判空、比较、求长、清空、连接、返回子串、 返回子串下标、替换子串、插入字串注意事项&#…

建设银行纪念币网站,石家庄疫情最新情况,美女做暧暧网站,中江建设银行网站一、代码如下 /* 项目名称:串的堆分配存储表示编译环境:VC 2008作者相关:。。。最后修改:2019.10.01学习目标:赋值、复制、判空、比较、求长、清空、连接、返回子串、 返回子串下标、替换子串、插入字串注意事项&#…

一、代码如下

/*
项目名称:串的堆分配存储表示编译环境:VC++ 2008作者相关:。。。最后修改:2019.10.01学习目标:赋值、复制、判空、比较、求长、清空、连接、返回子串、
返回子串下标、替换子串、插入字串注意事项:1.测试所有功能是否正常2.SubString函数中len最大值为StrLength(S)-pos+1
例:12345,长度为5,即5-1+1=5
*/#include <stdio.h>
#include <string.h>
#include <stdlib.h>#define  ERROR    0
#define  OK       1
#define  TRUE     true
#define  FALSE    falsetypedef  bool     Status;typedef  struct{char *ch;//非空串按串长分配存储区,否则ch为NULLint  length;}HString;Status  InitStr(HString &T);Status  StrAssign(HString &T,char* chars);//chars表示字符串Status  StrCopy(HString &T,HString S);//将串S复制给串TStatus  StrEmpty(HString S);int     CharsLength(char *chars);int     StrLength(HString S);int     StrCompare(HString S,HString T);//S>T,返回值>0,以此类推Status  ClearString(HString &S);//清空串并释放空间Status  Concat(HString &T,HString S1,HString S2);//T返回S1,S2连接而成的新串Status  SubString(HString &Sub,HString S,int pos,int len);//返回串S的第pos个字符起长度为len的字串int     Index(HString S,HString T,int pos);//返回字串在主串pos之后第一次出现的位置Status  Replace(HString &S,HString T,HString V);//V替换S中与T相等不重叠的字串Status  StrInsert(HString &S,int pos,HString T);//在S第pos个字符之前插入TStatus StrOut(HString S);int main()
{//定义变量及初始化   HString S,T1,T2,Sub,V;InitStr(S);InitStr(T1);InitStr(T2);InitStr(Sub);InitStr(V);char chars[]="12345";char chars1[]="123456";char chars2[]="abcd";//赋值操作StrAssign(T1,chars);printf("赋值后T1");StrOut(T1);//复制操作	StrCopy(S,T1);printf("复制后S");StrOut(S);//比较操作StrAssign(T1,chars1);printf("赋值后T1");StrOut(T1);int result=StrCompare(T1,S);printf("串S,T1比较结果:");if(result==0)printf("T1==S\n\n");else if(result>0)printf("T1>S\n\n");elseprintf("T1<S\n\n");//连接操作StrAssign(T2,chars);printf("赋值后T2");StrOut(T2);Concat(S,T1,T2);printf("T1与T2连接后S");StrOut(S);//截取字串操作SubString(Sub,S,3,4);printf("S串返回的起点为3,长度为4的Sub");StrOut(Sub);//返回字串在主串制定pos后第一次出现的位置StrCopy(T1,Sub);printf("复制后T1");StrOut(T1);int location=Index(S,T1,1);printf("字串在主串pos=1之后第一次出现的位置为:%d\n\n",location);//替换操作StrAssign(V,chars2);printf("赋值后V");StrOut(V);printf("T1");StrOut(T1);Replace(S,T1,V);printf("V替换T1后S");StrOut(S);//插入操作StrInsert(S,1,V);printf("在第一个位置前插入V串的S");StrOut(S);return 0;
}Status  InitStr(HString &T)
{T.ch=NULL;T.length=0;return OK;
}Status  StrAssign(HString &T,char* chars)//源代码里要求的是长度,不是字节
{int k = CharsLength(chars);if(T.ch) free(T.ch);//复制之前释放T串if(!k){T.ch=NULL;T.length=0;}else{T.ch = (char*)malloc(k*sizeof(char));T.length = k;for(int i=0;i<k;i++)T.ch[i] = chars[i];}return OK;
}Status  StrCopy(HString &T,HString S)
{if(!S.ch)return ERROR;if(T.ch){free(T.ch);T.ch=NULL;T.length=0;}T.ch=(char*)malloc(S.length*sizeof(char));for(int i=0;i<S.length;i++)T.ch[i]=S.ch[i];T.length=S.length;return OK;
}Status  StrEmpty(HString S)
{if(!S.length)return TRUE;elsereturn FALSE;}int   CharsLength(char *chars)
{return strlen(chars);
}int  StrLength(HString S)
{return S.length;
}int  StrCompare(HString S,HString T)
{for(int i=0;i<S.length&&i<T.length;++i)//先比较短的串{if(S.ch[i]!=T.ch[i])return S.ch[i]-T.ch[i];}return S.length-T.length;//若比较的字符全部相等的话
}Status  ClearString(HString &S)
{if(S.ch){free(S.ch);S.ch=NULL;}S.length=0;return OK;
}Status  Concat(HString &T,HString S1,HString S2)
{if(T.ch){free(T.ch);T.ch=NULL;T.length=0;}int SumLength=S1.length+S2.length;T.ch=(char *)malloc(SumLength*sizeof(char));for(int i=0;i<S1.length;i++)T.ch[i]=S1.ch[i];for(int i=S1.length;i<SumLength;++i)T.ch[i]=S2.ch[i-S1.length];T.length=SumLength;return OK;}
Status SubString(HString &Sub,HString S,int pos,int len)
{if(pos<1||pos>StrLength(S)||len<0||len>StrLength(S)-pos+1)return ERROR;if(Sub.ch)free(Sub.ch);if(!len)//空字串的情况{Sub.ch=NULL;Sub.length=0;}else{Sub.ch=(char*)malloc(len*sizeof(char));for(int i=0;i<len;i++)Sub.ch[i]=S.ch[i+pos-1];Sub.length=len;}return OK;}int Index(HString S,HString T,int pos)
{HString Sub;InitStr(Sub);if(pos<=0)return ERROR;int n=StrLength(S);int m=StrLength(T);int i=pos;while(i<=n-m+1){SubString(Sub,S,i,m);//这里误把i写成posif(StrCompare(Sub,T)!=0)++i;elsereturn i;}return 0;}Status  Replace(HString &S,HString T,HString V)//默认串V和T长度相同
{if(!S.ch||!T.ch||!V.ch)//存在串不存在return ERROR;int n=StrLength(S);int m=StrLength(T);int i=1,j=0;HString Sub;InitStr(Sub);while(i<=n-m+1){SubString(Sub,S,i,m);if(!StrCompare(Sub,T)){int k=i-1;while(j<m){S.ch[k]=V.ch[j];++k;++j;}}++i;}return OK;
}Status  StrInsert(HString &S,int pos,HString T)
{if(pos<1||pos>S.length+1)return ERROR;if(!StrEmpty(T)){if(!(S.ch=(char*)realloc(S.ch,(S.length+T.length)*sizeof(char))))return ERROR;}for(int i=S.length-1;i>=pos-1;--i)//pos之后(包括pos)后移T.length个单位S.ch[i+T.length]=S.ch[i];     //这样pos之前腾出T.length个空间for(int j=0;j<T.length;++j)//插入TS.ch[pos-1+j]=T.ch[j];S.length+=T.length;return OK;
}Status StrOut(HString S)
{printf("串内容: ");for(int i=0;i<S.length;i++){printf("%c",S.ch[i]);}printf("\n\n");return OK;
}

二、运行结果