#include<stdio.h>
#include<malloc.h>
#include<string.h>
#define TRUE 1
#define FALSE -1
#define M 255
#define ERROR 0
#define OK 1
typedef int Status;
typedef unsigned char SString[M+1];
void createstring(SString &T,char *chars)
{
int i;
if(strlen(chars)>M)
{
printf("存不了,你这太长了!");
}
else
{
T[0]=strlen(chars);
for(i=1;i<=T[0];i++)
T[i]=*(chars+i-1);
}
}
void StrCopy(SString &T,SString &S)
{
int i;
for(i=0;i<=S[0];i++)
T[i]=S[i];
}
int Strlength(SString T)
{
return T[0];
}
void print(SString &T)
{
int i;
printf("这个字符串为:\n");
for(i=1;i<=T[0];i++)
printf("%c",T[i]);
printf("\n");
}
int StrCompare(SString S,SString T)
{
int i = 1;
while(i <= S[0] && i <= T[0]){ //非空前提下
if(S[i] == T[i]){ //相等
i++;
}
else{ //不相等
return S[i] - T[i];
}
}
return S[0]-T[0];
}
void Strclear(SString S)
{
S[0]=0;
}
int Concat(SString T,SString S1,SString S2)
{
int i;
if(S1[0]+S2[0]<=M)
{
for(i=1;i<=S1[0];i++)
T[i]=S1[i];
for(i=1;i<=S2[0];i++)
T[S1[0]+i]=S2[i];
T[0]=S1[0]+S2[0];
return TRUE;
}
else
{
for(i=1;i<=S1[0];i++)
T[i]=S1[i];
for(i=1;i<=M-S1[0];i++)
T[S1[0]+i]=S2[i];
T[0]=M;
return FALSE;
}
}
Status SubString(SString Sub, SString T,int pos,int len)
{
if(pos<1 || pos>T[0] || len<0 || len>T[0]-pos+1)
return ERROR;
int i,j;
for(i = 1,j = pos;j <= len+pos-1;i++,j++){
Sub[i]=T[j];
}
Sub[0] = len;
return OK;
}
int StrEmpty(SString S)
{
if(S[0]==0)
return TRUE;
else
return FALSE;
}
int Strinsert(SString N,int pos,SString T)
{
int i;
if(pos<1||pos>N[0]+1)
printf("输入的位置错误哦!\n");
if(N[0]+T[0]<=M)
{
for(i=N[0];i>=pos;i--)
N[i+T[0]]=N[i];
for(i=pos;i<pos+T[0];i++)
N[i]=T[i-pos+1];
N[0]=N[0]+T[0];
return TRUE;
}
else
{
for(i=M;i>=pos+T[0];i--)
N[i]=N[i-T[0]];
for(i=pos;i<pos+T[0]&&i<M;i++)
N[i]=T[i-pos+1];
N[0]=M;
return FALSE;
}
}
void Strdelete(SString N,int pos,int len)
{
int i;
if(pos<1||pos>N[0]-len+1||len<0)
printf("输入数据有误!\n");
for(i=pos+len;i<N[0];i++)
N[i-len]=N[i];
N[0]=N[0]-len;
}
int Index(SString S,SString T,int pos)
{
SString Sub;
int i = pos;
if(pos > 0){
int n = Strlength(S),m = Strlength(T);
while( i<= n-m+1){
SubString(Sub,S,i,m);
if(StrCompare(Sub,T)==0)
return i;
else
i++;
}
}//if
printf("不存在\n");
return 0; //S中不存在与T相等的子串
}//Index
int main()
{
int i,len,pos;
int m,n;
SString t,s,N,sub;
printf("请创建两个字符串t,s:\n");
createstring(t,"ABCDEFGH");
createstring(s,"EFGH");
printf("两个字符串的长度是:\n");
m=Strlength(t);
printf("%d",m);
n=Strlength(s);
printf("%d",n);
printf("比较两个字符串的大小:\n");
i=StrCompare(s,t);
if(i>0)
{
printf("S>T\n");
}
if(i=0)
{
printf("S=T\n");
}
if(i<0)
{
printf("S<T\n");
}
printf("将t字符串输出:\n");
print(t);
printf("将两个字符串链接起来\n");
Concat(N,t,s);
print(N);
printf("请输入多少位置,多少长度的子串,然后输出:\n");
scanf("%d %d",&pos,&len);
SubString(sub,N,pos,len);
print(sub);
printf("在N字符串中什么位置插入S:\n");
scanf("%d",&pos);
Strinsert(N,pos,s);
print(N);
printf("需要删除的字串在什么位置长度是:\n");
scanf("%d %d",&pos,&len);
Strdelete(N,pos,len);
print(N);
int j = Index(t,s,1);
printf("找到子串T在S中的位置 = %d\n",j);
return 0;
}
#include<malloc.h>
#include<string.h>
#define TRUE 1
#define FALSE -1
#define M 255
#define ERROR 0
#define OK 1
typedef int Status;
typedef unsigned char SString[M+1];
void createstring(SString &T,char *chars)
{
int i;
if(strlen(chars)>M)
{
printf("存不了,你这太长了!");
}
else
{
T[0]=strlen(chars);
for(i=1;i<=T[0];i++)
T[i]=*(chars+i-1);
}
}
void StrCopy(SString &T,SString &S)
{
int i;
for(i=0;i<=S[0];i++)
T[i]=S[i];
}
int Strlength(SString T)
{
return T[0];
}
void print(SString &T)
{
int i;
printf("这个字符串为:\n");
for(i=1;i<=T[0];i++)
printf("%c",T[i]);
printf("\n");
}
int StrCompare(SString S,SString T)
{
int i = 1;
while(i <= S[0] && i <= T[0]){ //非空前提下
if(S[i] == T[i]){ //相等
i++;
}
else{ //不相等
return S[i] - T[i];
}
}
return S[0]-T[0];
}
void Strclear(SString S)
{
S[0]=0;
}
int Concat(SString T,SString S1,SString S2)
{
int i;
if(S1[0]+S2[0]<=M)
{
for(i=1;i<=S1[0];i++)
T[i]=S1[i];
for(i=1;i<=S2[0];i++)
T[S1[0]+i]=S2[i];
T[0]=S1[0]+S2[0];
return TRUE;
}
else
{
for(i=1;i<=S1[0];i++)
T[i]=S1[i];
for(i=1;i<=M-S1[0];i++)
T[S1[0]+i]=S2[i];
T[0]=M;
return FALSE;
}
}
Status SubString(SString Sub, SString T,int pos,int len)
{
if(pos<1 || pos>T[0] || len<0 || len>T[0]-pos+1)
return ERROR;
int i,j;
for(i = 1,j = pos;j <= len+pos-1;i++,j++){
Sub[i]=T[j];
}
Sub[0] = len;
return OK;
}
int StrEmpty(SString S)
{
if(S[0]==0)
return TRUE;
else
return FALSE;
}
int Strinsert(SString N,int pos,SString T)
{
int i;
if(pos<1||pos>N[0]+1)
printf("输入的位置错误哦!\n");
if(N[0]+T[0]<=M)
{
for(i=N[0];i>=pos;i--)
N[i+T[0]]=N[i];
for(i=pos;i<pos+T[0];i++)
N[i]=T[i-pos+1];
N[0]=N[0]+T[0];
return TRUE;
}
else
{
for(i=M;i>=pos+T[0];i--)
N[i]=N[i-T[0]];
for(i=pos;i<pos+T[0]&&i<M;i++)
N[i]=T[i-pos+1];
N[0]=M;
return FALSE;
}
}
void Strdelete(SString N,int pos,int len)
{
int i;
if(pos<1||pos>N[0]-len+1||len<0)
printf("输入数据有误!\n");
for(i=pos+len;i<N[0];i++)
N[i-len]=N[i];
N[0]=N[0]-len;
}
int Index(SString S,SString T,int pos)
{
SString Sub;
int i = pos;
if(pos > 0){
int n = Strlength(S),m = Strlength(T);
while( i<= n-m+1){
SubString(Sub,S,i,m);
if(StrCompare(Sub,T)==0)
return i;
else
i++;
}
}//if
printf("不存在\n");
return 0; //S中不存在与T相等的子串
}//Index
int main()
{
int i,len,pos;
int m,n;
SString t,s,N,sub;
printf("请创建两个字符串t,s:\n");
createstring(t,"ABCDEFGH");
createstring(s,"EFGH");
printf("两个字符串的长度是:\n");
m=Strlength(t);
printf("%d",m);
n=Strlength(s);
printf("%d",n);
printf("比较两个字符串的大小:\n");
i=StrCompare(s,t);
if(i>0)
{
printf("S>T\n");
}
if(i=0)
{
printf("S=T\n");
}
if(i<0)
{
printf("S<T\n");
}
printf("将t字符串输出:\n");
print(t);
printf("将两个字符串链接起来\n");
Concat(N,t,s);
print(N);
printf("请输入多少位置,多少长度的子串,然后输出:\n");
scanf("%d %d",&pos,&len);
SubString(sub,N,pos,len);
print(sub);
printf("在N字符串中什么位置插入S:\n");
scanf("%d",&pos);
Strinsert(N,pos,s);
print(N);
printf("需要删除的字串在什么位置长度是:\n");
scanf("%d %d",&pos,&len);
Strdelete(N,pos,len);
print(N);
int j = Index(t,s,1);
printf("找到子串T在S中的位置 = %d\n",j);
return 0;
}