删除指定子串

问题描述 

【问题描述】

删除指定子串:删除从指定位置pos开始的长度为len的子串

【输入形式】

第一行输入一个字符串;

第二行输入开始位置pos和子串长度len。

【输出形式】

删除成功则输出删除子串后的字符串,删除不成功则输出error。

【样例输入1】

I am a boy!

2 3

【样例输出1】

 I a boy!

【样例输入2】

I am a boy!

20 3

【样例输出1】

error

【评分标准】

只补充操作函数部分,不允许修改其他代码。

程序设计 

#include
#include
#define MAXSIZE 1000
typedef struct{
    char *data;
    int length;
    int stringsize;
}SqString;
//串的初始化
int initString(SqString *s)
{
    s->data=(char *)malloc(sizeof(char));
    s->length=0;
    s->stringsize=MAXSIZE;
    return 1;
}
//串的复制
int strAssign(SqString *s, char *str )
{
    int i=0;
    while(*str){
        s->data[i++]=*str++;
        s->length++;
    }
    return 1;
}
//串的比较
int strCompare(SqString *s,SqString *t)
{
    int i=0,j=0;
    while(ilength&&jlength){
        if(s->data[i]!=t->data[i]){
            return s->data[i]-t->data[i]; 
        }
    }
    return s->length-t->length;
}
//取子串
int subString(SqString *sub,SqString *s,int pos,int len)
{
    int i;
    if(pos<1||pos>s->length||len<0||len>s->length-pos+1)
    return 0;
    sub->length=0;
    for(i=0;i         sub->data[i]=s->data[i+pos-1];
        sub->length++;
    }
    sub->data[i]='\0';
    return 1;
}
//串的连接
int strConcat(SqString *s,SqString *s1, SqString *s2)
{
    int i=0,j=0;
    if(s1->length+s2->length>=s->stringsize){
        s->data=(char *)realloc(s->data,(s->stringsize+MAXSIZE)*sizeof(char));
        s->stringsize+=MAXSIZE;
    }
    while(ilength){
        s->data[i]=s1->data[i++];
    }
    while(jlength){
        s->data[i++]=s2->data[j++];
    }
    s->data[i]='\0';
    s->length=s1->length+s2->length;
    return 1; 
}
//在串中删除从第pos字符开始长度为len的字串
int delSubPosition(SqString *s,int pos,int len)
{
    if(pos<1||pos>s->length||len<1||len>s->length-pos+1){
        return 0;
    }
    int i,j;
    for(i=0;i         for(j=pos-1;jlength;j++){
            s->data[j]=s->data[j+1];
        }
        s->length--;
    }
    return 1;
}
int main()
{
    SqString s;
    int pos,len;
    char str[MAXSIZE];
    initString(&s);
    gets(str);
    strAssign(&s,str);
    scanf("%d%d",&pos,&len);
    //补充代码,输出结果
    int i;
    if(delSubPosition(&s,pos,len)==1){
        for(i=0;i             printf("%c",s.data[i]);
        }
    }else{
        printf("error\n");
    }
    return 0;

你可能感兴趣的:(#,【数据结构】题库一,算法,数据结构,开发语言,c语言)