| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 365 人关注过本帖
标题:请教老师字串去除程式
只看楼主 加入收藏
liziyue
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-8-13
结帖率:0
收藏
已结贴  问题点数:20 回复次数:4 
请教老师字串去除程式
/*字串去除程式*/
#include<stdio.h>
#include<stdlib.h>
void exclude(char*,char*);
int main(voed)
{
char str1[]="what a good world!";
char str2{}="good";        //要去除的字串
exclude(str1,str2);
puts(str1);
system("pause");
return 0;}                  //到此为止我是明白的,以下就是我不太明白的地方
void exclude(char *s1,char *s2)
{
int i, s2_len=strlen(s2);
for(i=0; i<(int)strlen(s1)-s2_len; i++){
if(!strncmp(s1+i,s2,s2_len)){
strcpy(s1+i,s1+i+s2_len);
i--;
   }
  }
}
书中的解释是:自定义函数exclude(),使用strncmp检查在s1中是否有和s2相同的部分。如果有
相同,则以后方的字串使用strcpy()函数来复制覆盖。在本例中s1中的good和s2字串相同,所以s1的good
字串被s1后方的字串word!字串盖过。
我不明白的是:s1中的good和s2字串相同,所以s1的good
字串被s1后方的字串word!字串盖过。为什么?具体的程式是strcpy(s1+i,s1+i+s2_len);这就表示盖过了?我看不懂,
还有i--是什么意思?
感谢哪位高手能指教一下,谢谢
2015-08-20 12:04
liziyue
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-8-13
收藏
得分:0 
回复 楼主 liziyue
希望能帮我详细的注解一下每一行的意思
2015-08-20 12:09
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:10 
先将代码写正确,并排版好
程序代码:
#include <stdio.h>
#include <string.h>

void exclude( char* s1, const char* s2 );

int main( void )
{
    char str1[] = "what a good world!";
    const char* str2 = "good";        //要去除的字串

    exclude( str1, str2 );
    puts( str1 );

    return 0;
}

void exclude( char* s1, const char* s2 )
{
    size_t m = strlen(s2);
    size_t n = strlen(s1) - strlen(s2);
    for( size_t i=0; i!=n; ++i )
    {
        if( strncmp(s1+i,s2,m) == 0 )
        {
            strcpy( s1+i, s1+i+m );
            --i;
        }
    }
}

2015-08-20 12:17
liziyue
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-8-13
收藏
得分:0 
回复 3楼 rjsp
码是正常的,排版重要吗?我只是问一下内容,论坛也不是编译器
2015-08-20 12:58
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:10 
好的编码风格 看起来赏心悦目  这样别人会愿意看一些  会增加你帖子的回复率  这是对你好  反之就不说了

DO IT YOURSELF !
2015-08-20 14:12
快速回复:请教老师字串去除程式
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021499 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved