免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2481 | 回复: 6
打印 上一主题 下一主题

[C] 【疑惑】指定位置删除指定长度子串的 一段程序 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-08-05 22:07 |只看该作者 |倒序浏览
如下函数,char * StrDelete(char * dest,int pos,int len),
实现主串 dest 指定位置pos开始删除len长度的子串。

如果我用
  1.         /*for(i = 0;i<(lenDest-len-pos-1);i++)
  2.                 {
  3.                         *(dest+pos-1+i) = *(dest+pos-1+len+i);       
  4.                 }*/
复制代码
代替
  1.         //移动后面子串到开始删除的地方
  2.                 for(i = pos+len-1;i<=lenDest;i++)
  3.                 {
  4.                         *(dest+i-len) = *(dest+i);
  5.                 }
复制代码
就出错。,请问错误在哪里呢?
  1. //删除
  2. char * StrDelete(char * dest,int pos,int len)
  3. {
  4.         int i;
  5.         int lenDest = strlen(dest);
  6.        
  7.         // 如果删除长度,超过主串后面剩余长度。则只保留前面
  8.         //字符
  9.         if(pos+len > lenDest)
  10.         {
  11.                 *(dest+pos-1) = '\0';
  12.         }
  13.                
  14.         else{
  15.                
  16.                 /*for(i = 0;i<(lenDest-len-pos-1);i++)
  17.                 {
  18.                         *(dest+pos-1+i) = *(dest+pos-1+len+i);       
  19.                 }*/
  20.                
  21.                 //移动后面子串到开始删除的地方
  22.                 for(i = pos+len-1;i<=lenDest;i++)
  23.                 {
  24.                         *(dest+i-len) = *(dest+i);
  25.                 }
  26.                 *(dest+lenDest-len) = '\0';
  27.         }
  28.         return dest;
  29. }
复制代码

论坛徽章:
0
2 [报告]
发表于 2014-08-05 22:32 |只看该作者
char * StrDelete(char * dest,int pos,int len)
{
    int i=pos+len;
    int index=0;
    for(;*(dest+i) != '\0'; ++i)
    {        
         *(dest+pos+index)=*(dest+i);
         ++index;
    }
    *(dest+pos+index)='\0';
    return dest;
}

论坛徽章:
0
3 [报告]
发表于 2014-08-05 22:32 |只看该作者
大概思路是这样

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
4 [报告]
发表于 2014-08-05 22:33 |只看该作者
本帖最后由 cobras 于 2014-08-05 22:48 编辑

char * StrDelete(char * dest,int pos,int len)
{
  strcpy(dest+pos, dest+pos+len);
  return dest;
}

论坛徽章:
0
5 [报告]
发表于 2014-08-05 22:36 |只看该作者
本帖最后由 kalo425 于 2014-08-05 22:40 编辑

谢谢你的回答,你的那个写法是错的。相当于前面pos的字符都丢失了。

我的主要疑惑是不知道下面这句错在哪里了··
我定义的字符的一个索引为1
  1. for(i = 0;i<(lenDest-len-pos-1);i++)
  2.                 {
  3.                         *(dest+pos-1+i) = *(dest+pos-1+len+i);        
  4.                 }
复制代码
回复 4# cobras


   

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
6 [报告]
发表于 2014-08-05 22:50 |只看该作者
打快了,笔误

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
7 [报告]
发表于 2014-08-05 22:51 |只看该作者
把strcpy展开就是答案。自己看看吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP