串的基本操作函数
#include <stdio.h>
#include <malloc.h>
#include <string.h>
typedef struct{
char *str;
int maxLength;
int length;
}DString;
void Initiate(DString *S, int max, char *string){
int i;
S->str = (char *)malloc(sizeof(char)*max);
S->maxLength = max;
S->length = strlen(string);
for(i=0;i<S->length;i++){
S->str[i] = string[i];
}
}
int Insert(DString *S, int pos, DString T){
int i;
if(pos<0){
printf("pos error!\n");
return 0;
}else{
if(S->length + T.length > S->maxLength){
realloc(S->str,(S->length+T.length)*sizeof(char));
S->maxLength = S->length+T.length;
}
for(i=S->length-1;i>=pos;i--){
S->str[i+T.length]= S->str[i];
}
for(i=S->length-1;i>=pos;i--){
S->str[pos+i] = T.str[i];
}
S->length+=T.length;
return 1;
}
}
int Delete(DString *S, int pos, int len){
int i;
if(S->length<=0){
printf("Empty!\n");
return 0;
}else if(pos<0 || len<0 || pos+len>S->length){
printf("pos or len is iillegal !\n");
return 0;
}else{
for(i=pos+len;i<=S->length-1;i++){
S->str[i-len] = S->str[i];
}
S->length = S->length-len;
return 1;
}
}
int SubString(DString *S, int pos, int len, DString *T){
int i;
if(pos<0 || len<0 || pos+len>S->length){
printf("pos or len is illegal !\n");
return 0;
}
if(len>T->maxLength){
T->str = (char*)malloc(len*sizeof(char));
T->maxLength = len;
}
for(i=0;i<len;i++){
T->str[i] = S->str[pos+i];
}
T->length = len;
return 1;
}
void Destroy(DString *S){
free(S->str);
S->maxLength = 0;
S->length =0;
}
void main(void){
DString myString1,myString2,myString3;
int i,max1 = 5,max2 = 9, max3 = 0;
Initiate(&myString1,max1,"Data");
Initiate(&myString2,max1,"Structure");
Initiate(&myString3,max3,"");
printf("初始化myString1串:\n");
for(i=0;i<myString1.length;i++){
printf("%c",myString1.str[i]);
}
printf("\nmaxLength=%d\n",myString1.maxLength);
printf("length=%d\n",myString1.length);
printf("\n==================================================\n");
Insert(&myString2,0,myString1);
printf("插入子串myString1后的myString2的值:\n");
for(i=0;i<myString2.length;i++){
printf("%c",myString2.str[i]);
}
printf("\nmaxLength=%d\n",myString2.maxLength);
printf("length=%d\n",myString2.length);
printf("\n==================================================\n");
Delete(&myString2,0,5);
printf("删除子串后的myString2的值:\n");
for(i=0;i<myString2.length;i++){
printf("%c",myString2.str[i]);
}
printf("\nmaxLength=%d\n",myString2.maxLength);
printf("length=%d\n",myString2.length);
printf("\n==================================================\n");
SubString(&myString2,0,5,&myString3);
printf("获取子串后后的myString3的值:\n");
for(i=0;i<myString3.length;i++){
printf("%c",myString3.str[i]);
}
printf("\nmaxLength=%d\n",myString3.maxLength);
printf("length=%d\n",myString3.length);
printf("\n==================================================\n");
Destroy(&myString1);
Destroy(&myString2);
getch();
}