字符串堆分配存储:删除操作

补全字符串堆分配存储之删除操作StrDelete

#include <stdio.h>

#include <malloc.h>

#include <stdlib.h>

#include <string.h>

#define OK 1

#define ERROR 0

#define MAXLEN 100

typedef struct {

	char *ch;

	int len;

} HString;

void Print(HString S) {

	int i;

	for(i=0; i<S.len; i++)

		printf("%c",S.ch[i]);

	printf("\n");

}

int  StrAssign(HString *S,char *str) {

	int i;

	if(!S->ch)

		free(S->ch);

	for(i=0; str[i]!='\0'; i++);

	if(i==0) {

		S->ch=NULL;

		S->len=0;

	} else {

		S->len=i;

		if(!(S->ch=(char *)malloc(i*sizeof(char))))

			return ERROR;

		for(i=0; i<S->len; i++)

			S->ch[i]=str[i];

	}

	return OK;

}

int StrDelete(HString *S,int pos,int len) {

/*	if(S->ch == NULL)

		return ERROR;

	if((pos+len)>=S->len)

		return ERROR;

	if(pos<1||pos>S->len-1||len<0||len>S->len-1)

		return ERROR;

	HString *q;

	q->ch =NULL;

	q->len =0;

	int i = 0;

	q->ch=(char *)malloc(sizeof(char));

	for(i;i<pos-1;i++){

			q->ch[i] = S->ch[i];

			q->len++;		

		}

	for(i = pos+len-1;i<S->len;i++){

		q->ch[i-len] =S->ch[i];

		q->len++;

		}	

	free(S->ch);

	*S =*q;

	S->len = S->len-len;

	

	return OK;

	*/

	int i ;

	if(pos<1||pos>S->len)

		return ERROR;

	if(len<=0||len>S->len-1||(pos+len)>S->len)

		return ERROR;

	for(i =pos-1;i<S->len-len+1;i++){

		S->ch[i] = S->ch[i+len];

	}

	S->len -= len;

	return OK;

	

}

int  main() {

	int pos,len,y;

	HString s,t;

	char chars[MAXLEN];

	int select;

	s.ch=NULL;

	s.len=0;

	t.ch=NULL;

	t.len=0;

	scanf("%s",chars);

	StrAssign(&s,chars);

	scanf("%d",&pos);

	scanf("%d",&len);

	if(StrDelete(&s,pos,len)==ERROR)

		printf("Failed!");

	else {

		printf("Success!\n");

		Print(s);

	}



}

​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

扎心小指针0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值