#include<stdio.h>
#include<malloc.h>
#include<assert.h>
#include<string.h>
typedef struct HeapString{
char* ch;
int length;
}HString;
//初始化
void initHString(HString* S){
S->ch = NULL;
S->length = 0;
}
//赋值
void strAssign(HString* S,char *str){
int len = strlen(str);
int i = 0;
//如果之前已经分配过空间,要先释放掉
if(S->ch != NULL){
free(S->ch);
}
S->ch = (char*)malloc(sizeof(char) * len);
assert(S->ch != NULL);
for(i;i < len;i++){
S->ch[i] = str[i];
}
S->length = len;
}
//打印
void printString(HString *S){
int i = 0;
for(i = 0;i < S->length;i++){
printf("%c",S->ch[i]);
}
printf("\n");
}
//拷贝
void strCopy(HString *S,HString *T){
if(S->ch != NULL){
free(S->ch);
}
int len = T->length;
S->ch = (char*)malloc(sizeof(char) * len);
assert(S->ch != NULL);
int i = 0;
for(i;i < len;i++){
S->ch[i] = T->ch[i];
}
S->length = len;
}
//判空
int strEmpty(HString *S) {
return S->length == 0;
}
//比较
int strCompare(HString *S,HString *T){
if(S->length == 0 && T->length == 0)
return;
int result = 0;
int i = 0;
int j = 0;
while(i < S->length && j < T->length){
if(S->ch[i] > T->ch[j]){
return 1;
} else if(S->ch[i] < T->ch[j]){
return -1;
} else {
i++;
j++;
}
}
if(i < S->length)
result = 1;
if(j < T->length)
result = -1;
return result;
}
int StrLength(HString* S){
return S->length;
}
void strConcat(HString *T,HString *s1,HString *s2){
if(T->ch != NULL)
free(T->ch);
int len1 = s1->length;
int len2 = s2->length;
T->ch = (char*)malloc(sizeof(char) * (len1 + len2));
assert(T->ch != NULL);
int i = 0;
for(i = 0;i < len1;i++){
T->ch[i] = s1->ch[i];
}
int j = 0;
for(j;j < len2;j++){
T->ch[i + j] = s2->ch[j];
}
T->length = len1 + len2;
}
void subString(HString *S,HString *sub,int pos,int len){
if(pos < 0 || pos > S->length || len <= 0 || len > S->length - pos)
return;
if(sub->ch != NULL)
free(sub->ch);
sub->ch = (char*)malloc(sizeof(char) * len);
assert(sub->ch != NULL);
int i = 0;
for(i;i < len;i++){
sub->ch[i] = S->ch[pos + i];
}
sub->length = len;
}
void strInsert(HString *S,int pos,HString *T){
if(T->length == 0)
return;
if(pos < 0 || pos > S->length)
return;
char* ch = (char*)realloc(S->ch,sizeof(char) * (S->length + T->length));
assert(ch != NULL);
S->ch = ch;
//先挪数据,从S的最后一个字符开始挪动,挪动距离为T的长度
int i = S->length - 1;
for(i;i >= pos;i--){
S->ch[i + T->length] = S->ch[i];
}
for(i = 0;i < T->length;i++){
S->ch[pos + i] = T->ch[i];
}
S->length += T->length;
}
void strDelete(HString *S,int pos,int len){
if(pos < 0 || pos > S->length)
return;
if(len <= 0 || len > S->length - pos)
return;
int i = 0;
for(i;i < len;i++){
S->ch[pos + i] = S->ch[pos + i + len];
}
}
void strClear(HString *S){
S->length = 0;
if(S->ch != NULL)
free(S->ch);
S->ch = NULL;
}
int main(){
HString S;
initHString(&S);
strAssign(&S,"abcdefg");
HString T;
initHString(&T);
strAssign(&T,"123");
int res = strCompare(&S,&T);
HString Y;
initHString(&Y);
// strConcat(&Y,&S,&T);
// subString(&S,&Y,2,3);
strInsert(&S,2,&T);
// printString(&Y);
printString(&S);
return 0;
}#include<stdio.h>
#include<malloc.h>
#include<assert.h>
#include<string.h>
typedef struct HeapString{
char* ch;
int length;
}HString;
//初始化
void initHString(HString* S){
S->ch = NULL;
S->length = 0;
}
//赋值
void strAssign(HString* S,char *str){
int len = strlen(str);
int i = 0;
//如果之前已经分配过空间,要先释放掉
if(S->ch != NULL){
free(S->ch);
}
S->ch = (char*)malloc(sizeof(char) * len);
assert(S->ch != NULL);
for(i;i < len;i++){
S->ch[i] = str[i];
}
S->length = len;
}
//打印
void printString(HString *S){
int i = 0;
for(i = 0;i < S->length;i++){
printf("%c",S->ch[i]);
}
printf("\n");
}
//拷贝
void strCopy(HString *S,HString *T){
if(S->ch != NULL){
free(S->ch);
}
int len = T->length;
S->ch = (char*)malloc(sizeof(char) * len);
assert(S->ch != NULL);
int i = 0;
for(i;i < len;i++){
S->ch[i] = T->ch[i];
}
S->length = len;
}
//判空
int strEmpty(HString *S) {
return S->length == 0;
}
//比较
int strCompare(HString *S,HString *T){
if(S->length == 0 && T->length == 0)
return;
int result = 0;
int i = 0;
int j = 0;
while(i < S->length && j < T->length){
if(S->ch[i] > T->ch[j]){
return 1;
} else if(S->ch[i] < T->ch[j]){
return -1;
} else {
i++;
j++;
}
}
if(i < S->length)
result = 1;
if(j < T->length)
result = -1;
return result;
}
int StrLength(HString* S){
return S->length;
}
void strConcat(HString *T,HString *s1,HString *s2){
if(T->ch != NULL)
free(T->ch);
int len1 = s1->length;
int len2 = s2->length;
T->ch = (char*)malloc(sizeof(char) * (len1 + len2));
assert(T->ch != NULL);
int i = 0;
for(i = 0;i < len1;i++){
T->ch[i] = s1->ch[i];
}
int j = 0;
for(j;j < len2;j++){
T->ch[i + j] = s2->ch[j];
}
T->length = len1 + len2;
}
void subString(HString *S,HString *sub,int pos,int len){
if(pos < 0 || pos > S->length || len <= 0 || len > S->length - pos)
return;
if(sub->ch != NULL)
free(sub->ch);
sub->ch = (char*)malloc(sizeof(char) * len);
assert(sub->ch != NULL);
int i = 0;
for(i;i < len;i++){
sub->ch[i] = S->ch[pos + i];
}
sub->length = len;
}
void strInsert(HString *S,int pos,HString *T){
if(T->length == 0)
return;
if(pos < 0 || pos > S->length)
return;
char* ch = (char*)realloc(S->ch,sizeof(char) * (S->length + T->length));
assert(ch != NULL);
S->ch = ch;
//先挪数据,从S的最后一个字符开始挪动,挪动距离为T的长度
int i = S->length - 1;
for(i;i >= pos;i--){
S->ch[i + T->length] = S->ch[i];
}
for(i = 0;i < T->length;i++){
S->ch[pos + i] = T->ch[i];
}
S->length += T->length;
}
void strDelete(HString *S,int pos,int len){
if(pos < 0 || pos > S->length)
return;
if(len <= 0 || len > S->length - pos)
return;
int i = 0;
for(i;i < len;i++){
S->ch[pos + i] = S->ch[pos + i + len];
}
}
void strClear(HString *S){
S->length = 0;
if(S->ch != NULL)
free(S->ch);
S->ch = NULL;
}
int main(){
HString S;
initHString(&S);
strAssign(&S,"abcdefg");
HString T;
initHString(&T);
strAssign(&T,"123");
int res = strCompare(&S,&T);
HString Y;
initHString(&Y);
// strConcat(&Y,&S,&T);
// subString(&S,&Y,2,3);
strInsert(&S,2,&T);
// printString(&Y);
printString(&S);
return 0;
}