#ifndef _STRING_H_
#define _STRING_H_
#define _STRING_H_
#define OK 1
#define FALSE 0
#define TRUE 1
#define ERROR 0
#define OVERFLOW -1
#define MAXSTRLEN 10
typedef unsigned char SString[MAXSTRLEN + 1];//0号单元存储长度
typedef int Status;
#define FALSE 0
#define TRUE 1
#define ERROR 0
#define OVERFLOW -1
#define MAXSTRLEN 10
typedef unsigned char SString[MAXSTRLEN + 1];//0号单元存储长度
typedef int Status;
Status StrAssign(SString &T,char prt[]);
Status DestoryString(SString &S);
Status Concat(SString &T,SString S1,SString S2);
Status SubString(SString &Sub,SString S,int pos,int len);
Status Index(SString S,SString T,int pos);
void print(SString S);
Status DestoryString(SString &S);
Status Concat(SString &T,SString S1,SString S2);
Status SubString(SString &Sub,SString S,int pos,int len);
Status Index(SString S,SString T,int pos);
void print(SString S);
#endif
#include"string.h"
#include<iostream>
#include<string>
using namespace std;
#include<iostream>
#include<string>
using namespace std;
//构造字符串
Status StrAssign(SString &T,char prt[])
{
int i;
if (strlen(prt) > MAXSTRLEN)
{
return ERROR;
}
else
{
T[0] = strlen(prt);
for (i = 0; i <= T[0]; i++)
{
T[i + 1] = prt[i];
}
return OK;
}
}
Status StrAssign(SString &T,char prt[])
{
int i;
if (strlen(prt) > MAXSTRLEN)
{
return ERROR;
}
else
{
T[0] = strlen(prt);
for (i = 0; i <= T[0]; i++)
{
T[i + 1] = prt[i];
}
return OK;
}
}
//连接两个字符串
Status Concat(SString &T,SString S1,SString S2)
{
int i,flag;
if(S1[0]+S2[0]<=MAXSTRLEN)
{
T[0]=S1[0]+S2[0];
for(i=1;i<=S1[0];i++)
{
T[i]=S1[i];
}
for(i=S1[0]+1;i<=T[0];i++)
{
T[i]=S2[i-S1[0]];
}
flag=TRUE;
}
else if(S1[0]<MAXSTRLEN)
{
T[0]=MAXSTRLEN;
for(i=1;i<=S1[0];i++)
{
T[i]=S1[i];
}
for(i=S1[0]+1;i<=T[0];i++)
{
T[i]=S2[i-S1[0]];
}
flag=FALSE;
}
else
{
T[0]=S1[0];
for(i=1;i<=S1[0];i++)
{
T[i]=S1[i];
}
flag=FALSE;
}
return flag;
}
Status Concat(SString &T,SString S1,SString S2)
{
int i,flag;
if(S1[0]+S2[0]<=MAXSTRLEN)
{
T[0]=S1[0]+S2[0];
for(i=1;i<=S1[0];i++)
{
T[i]=S1[i];
}
for(i=S1[0]+1;i<=T[0];i++)
{
T[i]=S2[i-S1[0]];
}
flag=TRUE;
}
else if(S1[0]<MAXSTRLEN)
{
T[0]=MAXSTRLEN;
for(i=1;i<=S1[0];i++)
{
T[i]=S1[i];
}
for(i=S1[0]+1;i<=T[0];i++)
{
T[i]=S2[i-S1[0]];
}
flag=FALSE;
}
else
{
T[0]=S1[0];
for(i=1;i<=S1[0];i++)
{
T[i]=S1[i];
}
flag=FALSE;
}
return flag;
}
//求子串
Status SubString(SString &Sub,SString S,int pos,int len)
{
int i,j;
if(pos<1||pos>S[0]||len<0||len>S[0]-pos+1)
{
return ERROR;
}
else
{
for(i=1,j=pos;i<=len,j<=pos+len-1;i++,j++)
{
Sub[i]=S[j];
}
Sub[0]=len;
return OK;
}
}
Status SubString(SString &Sub,SString S,int pos,int len)
{
int i,j;
if(pos<1||pos>S[0]||len<0||len>S[0]-pos+1)
{
return ERROR;
}
else
{
for(i=1,j=pos;i<=len,j<=pos+len-1;i++,j++)
{
Sub[i]=S[j];
}
Sub[0]=len;
return OK;
}
}
//模式匹配
Status Index(SString S,SString T,int pos)
{
int i=pos,j=1;
if(pos<0||pos>S[0])
{
return ERROR;
}
else
{
while(i<=S[0]&&j<=T[0])
{
if(S[i]==T[j])
{
i++;
j++;
}
else
{
i=i-j+2;
j=1;
}
}
if(j>T[0])
{
return i-T[0];
}
else
{
return ERROR;
}
}
}
Status Index(SString S,SString T,int pos)
{
int i=pos,j=1;
if(pos<0||pos>S[0])
{
return ERROR;
}
else
{
while(i<=S[0]&&j<=T[0])
{
if(S[i]==T[j])
{
i++;
j++;
}
else
{
i=i-j+2;
j=1;
}
}
if(j>T[0])
{
return i-T[0];
}
else
{
return ERROR;
}
}
}
//遍历
void print(SString S)
{
int i;
if(S[0]!=0)
{
for(i=1;i<=S[0];i++)
{
cout<<S[i]<<" ";
}
}
cout<<endl;
}
void print(SString S)
{
int i;
if(S[0]!=0)
{
for(i=1;i<=S[0];i++)
{
cout<<S[i]<<" ";
}
}
cout<<endl;
}
#include"string.h"
#include<string>
#include<iostream>
using namespace std;
#include<string>
#include<iostream>
using namespace std;
int main()
{
int pos,len,select;
char a1[11],a2[11],a3[11],a4[11];
SString S,S1,S2,T,Sub;
cout<<"请输入字符串S:"<<endl;
cin.get(a1,11);
StrAssign(S,a1);
print(S);
cin.sync();//清空缓冲区域
do
{
cout<<"1.连接两个字符串!"<<endl;
cout<<"2.求子串!"<<endl;
cout<<"3.模式匹配!"<<endl;
cout<<"0.操作结束!"<<endl;
cout<<"请选择:"<<endl;
cin>>select;
cin.sync();//清空缓冲区域
switch(select)
{
case 1:
cout<<"请输入a2:"<<endl;
cin.get(a2,10);
StrAssign(S1, a2);
cin.sync(); //清空缓冲区域或者用 getchar();//清空缓冲区域
cout<<"请输入a3:"<<endl;
cin.get(a3,10);
StrAssign(S2,a3);
cin.sync();//清空缓冲区域
if(Concat(T,S1,S2)==FALSE)
{
cout<<"截断!"<<endl;
}
else
{
print(T);
}
break;
case 2:
cout<<"请输入位置:"<<endl;
cin>>pos;
cout<<"请输入长度:"<<endl;
cin>>len;
if(SubString(Sub,S,pos,len)==ERROR)
{
cout<<"位置输入不合法或长度输入不合法!"<<endl;
}
else
{
print(Sub);
}
break;
case 3:
cin.sync();//清空缓冲区域
cout<<"请输入a4:"<<endl;
cin.get(a4,5);
StrAssign(T,a4);
cout<<"请输入位置:"<<endl;
cin>>pos;
if(Index(S,T,pos)==ERROR)
{
cout<<"位置输入有误或不匹配!"<<endl;
}
else
{
cout<<"第一个匹配的位置为:"<<Index(S,T,pos)<<endl;
}
break;
case 0:
cout<<"操作结束!"<<endl;
break;
default:
cout<<"选择错误!"<<endl;
}
}while(select!=0);
return 0;
}
{
int pos,len,select;
char a1[11],a2[11],a3[11],a4[11];
SString S,S1,S2,T,Sub;
cout<<"请输入字符串S:"<<endl;
cin.get(a1,11);
StrAssign(S,a1);
print(S);
cin.sync();//清空缓冲区域
do
{
cout<<"1.连接两个字符串!"<<endl;
cout<<"2.求子串!"<<endl;
cout<<"3.模式匹配!"<<endl;
cout<<"0.操作结束!"<<endl;
cout<<"请选择:"<<endl;
cin>>select;
cin.sync();//清空缓冲区域
switch(select)
{
case 1:
cout<<"请输入a2:"<<endl;
cin.get(a2,10);
StrAssign(S1, a2);
cin.sync(); //清空缓冲区域或者用 getchar();//清空缓冲区域
cout<<"请输入a3:"<<endl;
cin.get(a3,10);
StrAssign(S2,a3);
cin.sync();//清空缓冲区域
if(Concat(T,S1,S2)==FALSE)
{
cout<<"截断!"<<endl;
}
else
{
print(T);
}
break;
case 2:
cout<<"请输入位置:"<<endl;
cin>>pos;
cout<<"请输入长度:"<<endl;
cin>>len;
if(SubString(Sub,S,pos,len)==ERROR)
{
cout<<"位置输入不合法或长度输入不合法!"<<endl;
}
else
{
print(Sub);
}
break;
case 3:
cin.sync();//清空缓冲区域
cout<<"请输入a4:"<<endl;
cin.get(a4,5);
StrAssign(T,a4);
cout<<"请输入位置:"<<endl;
cin>>pos;
if(Index(S,T,pos)==ERROR)
{
cout<<"位置输入有误或不匹配!"<<endl;
}
else
{
cout<<"第一个匹配的位置为:"<<Index(S,T,pos)<<endl;
}
break;
case 0:
cout<<"操作结束!"<<endl;
break;
default:
cout<<"选择错误!"<<endl;
}
}while(select!=0);
return 0;
}