del #36

题目:

实现在字符串的内部删除字符串的函数del。函数原型如下:
void del(char * s,int n,int len) ;
在s指向的字符串中,从s第n个字符的位置开始,删除len个字符,结果通过指针s返回。
n是从0开始,到s的长度-1为止。从0开始,len=s的字符串长度时,全部删除,原字符串为空字符串。
注意:使用空格字符来表示字符串的结束。
例如source指向位置,依次保存了字符'a',字符'b',字符空格' ',字符'c',则source指向的字符串为"ab"。
保存为functions.cpp。
遇到异常情况(s为null,n为负数等等),输出"error";
否则不要随意输出,会视为错误。
例如:s为以空格结尾的字符串apple 
调用del(s, 2, 2);之后,删除了数组下标以2开始的2个字符pl,结果为(以空格结尾)
ape

分析:

与其他几道码图的题目一样,本题是用空格来标志一个字符串的结束,所以我们不用刻意的想'\0'出现在' '之前,因为这种情况下,在空格出现之前结束了对字符串的读取。即这种情况是不会出现在测试数据中的。

异常情况,这道题目的异常情况异常的多。s为NULL(matu愚蠢的系统可不认识null,至少这个题是这样的),n为负数,len为负数,n+len过大导致数组的越界。

实际上,len==0这个判断的代码是可以去掉的

#include<stdio.h>
void del(char * s,int n,int len) 
{
	if(s==NULL||n<0||len<0)
	{
		printf("error");
		return;
	}
	for(int i=0;i<n+len;i++)
	{
		if(s[i]==' ')
		{
			printf("error");
			return ;
		}
	}
	if(len==0)
	{
		return;
	}
	int i=n;
	for(;s[i+len]!=' ';i++)
	{	
		s[i]=s[i+len];
	}
	for(;s[i]!='\0';i++)
	{
		s[i]=' '; 
	}	
} 

实际上,这个程序如果不用这个循环来判断越界,这个题就会异常的难做。

for(int i=0;i<n+len;i++)
	{
		if(s[i]==' ')
		{
			printf("error");
			return ;
		}
	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值