| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 429 人关注过本帖
标题:看不懂。帮忙红色部分加个注释。谢谢!!
只看楼主 加入收藏
刘定邦
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:687
专家分:1570
注 册:2010-9-21
结帖率:100%
收藏
已结贴  问题点数:30 回复次数:3 
看不懂。帮忙红色部分加个注释。谢谢!!
/*下列给定程序中,函数fun的功能:将S所指字符串中最后一次出现的、t1所指子串替换成t2所指子串
,所形成的新串放在w所指的数组中。在此处,要求t1和t2所指字符串的长度相同。
例如,当s所指字符串中的内容为abcdabfabc,t1所指子串中的内容为ab,t2所指子串中的内容为99时,
结果,在w所指的数组中的内容应为abcdabf99c。
*/
#include <stdio.h>
#include <string.h>

void fun(char *s,char *t1, char *t2, char *w)
{
    int i; char *p, *r, *a;
    strcpy(w, s);
    while(*w)
    {
        p = w; r = t1;
        while(*r)
            if(*r == *p)
            {
                r++;
                p++;
            }
            else break;
            if (*r == '\0') a = w;
            w++;
    }
    r = t2;
    while(*r)
    {
        *a = *r;
        a++;
        r++;
    }
}

int main(void)
{
    char s[100],t1[100],t2[100],w[100];
    //clrscr();
    printf("\nPlease enter string s: ");
    scanf("%s",s);
    printf("\nPlease enter substring t1: ");
    scanf("%s",t1);
    printf("\nPlease enter substring t2: ");
    scanf("%s",t2);
    if (strlen(t1)==strlen(t2))
    {
        fun(s,t1,t2,w);
        printf("\nThe result is :%s\n",w);
    }
    else printf("\nError:strlen(t1)!=strlen(t2)\n");
}

感觉指针有点难呀。帮个忙把红色部分加注释。越详细越好。谢谢!!!
搜索更多相关主题的帖子: include 字符串 
2011-08-27 22:39
A13433758072
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广东潮州
等 级:小飞侠
威 望:1
帖 子:1182
专家分:2784
注 册:2010-7-22
收藏
得分:15 
回复 楼主 刘定邦
兄弟我看你来这也不早了咋才学到这里╯_╰手机注解有点乱别介意 while(*w!=0)指针不等于零
    {
        p = w; r = t1;指针赋值
        while(*r)同样指针不等于零(也就是空指针)
            if(*r == *p)如果两个指针所指的值相等的情况下
            {
                r++;地址向前移动一
                p++;同上
            }
            else break;否则跳出循环
            if (*r == '\0')'\0'字符串的结束标志 a = w;指针赋值
            w++;同上
    }
    r = t2;
    while(*r)同上
    {
        *a = *r;指针所指的值赋值给指针a
        a++;地址向前移动一
        r++;

一步一个脚印...............................默默地前进.....
诚邀乐于解答c菜鸟问题,的热心网友加入,  QQ群38490319
2011-08-27 22:57
刘定邦
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:687
专家分:1570
注 册:2010-9-21
收藏
得分:0 
回复 楼主 刘定邦
呵呵。我自学的。我笨。学得慢呀。 那如果不只是替换最后一个。而把前面出现的都换了。又怎么弄。
2011-08-27 23:14
Luminal
Rank: 6Rank: 6
等 级:侠之大者
帖 子:140
专家分:470
注 册:2011-8-24
收藏
得分:15 
2楼的老大已经给出了详细的解释,这里我就不罗嗦了,
while(*w!=0)指针不等于零,我认为解释的不确切,应该解释为w所指的地址的值不等于0好些!
下面的函数是结合楼主的程序和最后那个问题改写的,本想在楼主源程序上修改,但水平有限
只好重写一个程序,仅为了说明问题!如有不当之处,请不吝赐教!
注:下面这段程序代码很烂,大家凑合着看吧
   main()程序还是用楼主的,所有代码测试通过.
程序代码:
void replace(char* dest,char* source); //替换函数
void fun(char *s,char *t1, char *t2, char *w);//查找函数
...............

void fun(char *s,char *t1, char *t2, char *w)
{
int i=0;
int j=0;
char *temp=NULL;
strcpy(w, s);
//if字符串w为空或已读到字符串尾部退出while; 
while(*(w++))

 {    
     if(*(w+i)==*(t1+i))
    {
        for(j=0;*(t1+i+j);j++)
        {
            if(*(t1+i+j)==*(w+i+j)&&!(*(t1+i+j+1)))
             {    
                 temp=w+i;//记住字符串t1在原字符串出现的位置 
                  replace(temp,t2);//如果全部替换; 
             }
        }
     }

 }

 //replace(temp,t2);//如果只替换最后出现的
} 
// 当然也可以传进来一个选项参数(all or last)
//函数原型:
//void fun(char *s,char *t1, char *t2, char *w,int option);
//option=1 全部替换;option=0 替换最后
//这样只需要在上面的程序中出现replace()的地方加入
//判断语句就ok了;
//在全部替换那个位置加入:if(option==1)replace(temp,t2);
//在尾部替换那个位置加入:if(option==0)replace(temp,t2); 

void replace(char* dest,char* source)  
{
    while(*source)
    { 
        *dest = *source;
        dest++;
        source++;
    }
}


[ 本帖最后由 Luminal 于 2011-8-28 17:34 编辑 ]
2011-08-28 17:32
快速回复:看不懂。帮忙红色部分加个注释。谢谢!!
数据加载中...
 
   



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

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