#include<iostream>
#include<cstring>
#include<cstdio>
#include<stdlib.h>
#include<malloc.h>
#define LIST_INIT_SIZE 10//线性表初始长度
#define LISTINCREMENT 10//增量
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
using namespace std;
typedef int Status;
typedef struct MyString{
char* str;
int length;
MyString(){
str=NULL;
length=0;
}
}HString;
Status StrAssign(HString& T,char* s){
if(T.str)free(T.str);
int len=strlen(s);
if(!len){T.length=len;T.str=NULL;}
else{
T.str=(char*)malloc(sizeof(char)*(len+1));
if(!T.str)exit(OVERFLOW);
for(int i=0;i<=len;i++){//把'\0'一起进行复制
T.str[i]=s[i];
}
T.length=len;
}
return OK;
}
int Strlength(HString T){
return T.length;
}
int StrCompare(HString S,HString T){
for(int i=0;i<S.length&&i<T.length;i++){
if(S.str[i]!=T.str[i]){
return S.str[i]-T.str[i]>0?1:0;
}
}
return S.length-T.length>0?1:0;
}
Status ClearString(HString &S){
if(S.str)free(S.str);
S.length=0;
return OK;
}
Status Concat(HString& T,HString S1,HString S2){
int len1=S1.length;
int len2=S2.length;
if(!T.str)free(T.str);
if(len1==0&&len2==0){T.length=0;T.str=NULL;}
else{
T.str=(char*)malloc(sizeof(char)*(len1+len2));
if(!T.str)exit(OVERFLOW);
for(int i=0;i<len1;i++){
T.str[i]=S1.str[i];
}
for(int i=0;i<=len2;i++){
T.str[len1+i]=S2.str[i];
}
T.length=len1+len2;
}
return OK;
}
Status SubString(HString &Sub,HString S,int pos,int len){
if(pos<1||pos>S.length||len<0||len>S.length-pos+1)return ERROR;
if(Sub.str)free(Sub.str);
if(!len){Sub.length=0,Sub.str=NULL;}
else{
Sub.str=(char*)malloc(sizeof(char)*(len+1));
for(int i=0;i<len;i++){
Sub.str[i]=S.str[pos+i-1];
}
Sub.str[len]='\0';
Sub.length=len;
}
return OK;
}
int main(){
HString s1,s2,T,Sub;
StrAssign(s1,"And you");
StrAssign(s2,"And you");
Concat(T,s1,s2);
SubString(Sub,s1,1,2);
cout<<Sub.str<<endl;
return 0;
}
串
最新推荐文章于 2023-08-18 09:38:59 发布