标题:一道编程题的困惑
只看楼主
妍清舞
Rank: 1
等 级:新手上路
帖 子:121
专家分:0
注 册:2007-11-12
 问题点数:0 回复次数:5 
一道编程题的困惑
/*
编程题:

  函数replace的功能是:将所有在字符串s中出现的t1字符串全部替换成t2字符串。
  注意t1和t2的长度均大于0,但未必相等。替换之后的结果通过函数返回。
  
例如:
  s="123abc12f", t1="12", t2="3", 则结果为"33abc3f"。
  
要求:
  1. 已有的程序框架不准修改;
  2. 所有内容最好添加在replace函数中,不过允许在replace前自定义新函数;
  3. 不准在添加的代码中调用字符串有关的任何系统函数。
*/
#include "stdio.h"
#include "stdlib.h"

char *replace(char *s, char *t1, char *t2)
{
    char *p1=s;
    char temp;
    int len_t1=0,len_t2=0,len_s=0;
    int m,i,j,k,l,cur;
    int flag;
    while(*t1!='\0')
    {
        len_t1++;
        t1++;
    }
    while(*t2!='\0')
    {
        len_t2++;
        t2++;
    }
    m=len_t2-len_t1;
    while(*p1!='\0')
    {
        len_s++;
        p1++;
    }
    for(i=0;i<len_s-len_t1;i++)
    {
        flag=1;
        for(j=0;j<len_t1;j++)
        {
            if(*(p1+i)!=*(t1+i))
            {
                flag = 0;
                break;
            }
            if (flag)
                cur=i-len_t1;
        }
        if(m>=0)
        {
            for(k=len_s;k>i;k--)
                *(p1+k)=*(p1+k+m);
            for(l=cur;l<=cur+len_t2;l++)                       
                *(p1+l)=*(t1+l-cur);
        }
        if(m<0)
        {
            for(k=i;k<len_s;k++)
                *(p1+k)=*(p1+k+m);
            for(l=cur;l<=cur+len_t2;l++)
                *(p1+l)=*(t1+l-cur);
        }
    }
    return(s);
}

int main()
{
  char s[100]="bdec5e947c0e31cc2aa7fa47c98fbd06";
  char *t1="5";
  char *t2="FIVE";
  char *p;
  p = replace(s, t1, t2);
  printf("S=%s\n", s);
  printf("Replace %s with %s is:\n%s\n", t1, t2, p);
  getchar();
  return 0;
}

不知道哪一步出了问题,麻烦高手们帮忙看看,谢谢!
搜索更多相关主题的帖子: 函数 char replace 困惑 
2008-03-03 21:28
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
得分:0 
你c++里面的string做啊........

学习需要安静。。海盗要重新来过。。
2008-03-03 21:32
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
得分:0 
#include "stdio.h"
#include "stdlib.h"
#include"string.h"

char *replace(char *s, char *t1, char *t2)
{
    char *p1;
    int n;
    do
    {
       n=strlen(s);
     p1=strstr(s,t1);
     printf("%s\n",s);
     if(p1!=NULL)
     {
     for(int i=0;i<s+n-p1;i++)
     {
        *(s+n-2+strlen(t2)-i)=*(s+n-1-i);
     }
      
     for(int j=0;j<strlen(t2);j++)
     {
         *(p1+j)=*(t2+j);
     }
     }
     else
         break;
     printf("\n%s\n",s);
    // getchar();
    }
    while(1);  
    return(s);
}

int main()
{
  char s[100]="bdec5e947c05e31cc2aa7fa47c98fbd06";
  char *t1="5";
  char *t2="FIVE";
  char *p;
  p = replace(s, t1, t2);
  printf("\nS=%s\n", s);
  printf("Replace %s with %s is:\n%s\n", t1, t2, p);
  getchar();
  return 0;
}

学习需要安静。。海盗要重新来过。。
2008-03-03 23:12
woami66
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2008-2-29
得分:0 
问题有点多,我都通过注释标出位置了,你自己看看吧,我尽量没改变你程序原来的结构


#include "stdio.h"
#include "stdlib.h"

char *replace(char *s, char *t1, char *t2)
{
    char *p1=s;
    char *pt1=t1,*pt2=t2; //1
    char temp;
    int len_t1=0,len_t2=0,len_s=0;
    int m,i,j,k,l,cur;
    int flag;
    while(*t1!='\0')
    {
        len_t1++;
        t1++;
    }
   
    while(*t2!='\0')
    {
        len_t2++;
        t2++;
    }
   
    m=len_t2-len_t1;

    while(*p1!='\0')
    {
        len_s++;
        p1++;
    }
    p1=s;//2
    for(i=0;i<=len_s-len_t1;i++)//3
    {
        t1=pt1;//4
        t2=pt2;//5
        flag=1;
            
   
        for(j=0;j<len_t1;j++)
        {
            
            if(*(p1+i+j)!=*(t1+j)) //6
            {
                flag = 0;
                break;
            }
            if (flag)
                cur=i;//7
        }

        if(flag){                //8
        if(m>=0)
        {
            for(k=len_s;k>i;k--)
                *(p1+k+m)=*(p1+k);
            for(l=cur;l<cur+len_t2;l++)  //9                     
                *(p1+l)=*(t2+l-cur);//10
        }
        if(m<0)
        {
            for(k=i-m;k<=len_s;k++)//11
                *(p1+k+m)=*(p1+k); //12
            for(l=cur;l<cur+len_t2;l++)   //13
                *(p1+l)=*(t2+l-cur);//14
        }
        }                //15
    }
    return(s);
}

int main()
{
  char s[100]="bdec5e947c0e31cc2aa7fa47c98fbd06";
  char *t1="5";
  char *t2="FIVE";

  char *p;
  p = replace(s, t1, t2);
  printf("S=%s\n", s);//原串已经被改掉了,这里无发看到原串了
  //其实,此时s和p 值是相同的
  printf("Replace %s with %s is:\n%s\n", t1, t2, p);
  getchar();
  return 0;
}
2008-03-03 23:46
xianshizhe111
Rank: 1
等 级:新手上路
帖 子:1451
专家分:0
注 册:2007-12-8
得分:0 
#include "stdio.h"
#include "stdlib.h"
char *replace(char *s, char *t1, char *t2)
{
    char str[50],*swap=s;
    int i=0;
    for(;*s!='\0';s++)
    {
        if(*s==*t1)
            for(;*t2!='\0';t2++)
                str[i++]=*t2;
        else
            str[i++]=*s;
    }
    str[i]='\0';
    for(i=0;str[i]!='\0';i++)
         *swap++=str[i];
    *swap='\0';
    return (swap);
}

int main()
{
  char s[100]="bdec5e947c0e31cc2aa7fa47c98fbd06";
  char *t1="5";
  char *t2="FIVE";
  char *p;
  p=replace(s,t1,t2);
  printf("S=%s\n", s);
  printf("Replace %s with %s is:\n%s\n", t1, t2, p);
  getchar();
  return 0;
}
2008-03-04 02:43
妍清舞
Rank: 1
等 级:新手上路
帖 子:121
专家分:0
注 册:2007-11-12
得分:0 
谢谢了,各位大哥、大姐,小弟我终于知道错在哪了.
2008-03-05 17:30



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-201821-1-1.html




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

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