CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

一道面试题

楼主good_0525(gsy)2005-04-01 11:45:51 在 C/C++ / C语言 提问

一道面试题,replace(string   str,string   old,string   new);用字串new替换str中   old字串  
  问题点数:0、回复次数:5Top

1 楼good_0525(gsy)回复于 2005-04-04 13:38:55 得分 0

欢迎大家来做做Top

2 楼playmud((猪头流氓)(抵制日货)(热烈庆祝火箭输球))回复于 2005-04-04 13:48:11 得分 0

int   str_replay(char   *   source_str,char   *   source_word,char   *   target_word)  
  {  
  int   i,j,k,source_str_len,num,source_word_len,target_word_len;  
  char   a[300000],b[300000];  
  i=0;  
  j=0;  
  k=0;  
  source_str_len=strlen(source_str);  
  source_word_len=strlen(source_word);  
  target_word_len=strlen(target_word);  
   
  if(source_str_len<1   ||   source_word_len<1   ||   target_word_len<1   ||   source_str_len<source_word_len)  
                  {  
                  printf("input   error!");  
                  return   0;  
  }  
  /*for循环比strcpy要慢!  
  for(k=0;k<source_str_len;k++)  
                {  
                a[k]=*(source_str+k);  
                }  
  */  
  strcpy(a,source_str);  
  while(i<source_str_len)  
            {  
   
            num=0;  
                  for(k=0;k<source_word_len;k++)  
                          {  
                            if(a[i+k]==*(source_word+k))  
                                {  
                                num++;  
                                }  
                          }  
   
            if(num==source_word_len)  
                          {  
                          for(k=0;k<target_word_len;k++)  
                                      {  
                                      b[j]=*(target_word+k);  
                                      j++;  
                                      }  
                          i=i+source_word_len;  
                          }  
            else  
                          {  
                          b[j]=a[i];  
                          /*a[i]='\0'*/;  
                          i++;  
                          j++;  
                          }  
            }  
  b[j]='\0';  
  /*  
  for(k=0;k<j;k++)  
        {  
        *(source_str+k)=b[k];  
          b[k]='\0';  
  }  
  for(k=k;k<300000;k++)  
        {  
        *(source_str+k)='\0';  
        }  
  */  
  strcpy(source_str,b);  
  return   1;  
  }  
  Top

3 楼MagicCarmack(MagiC++)回复于 2005-04-04 15:01:40 得分 0

数据结构中应该有讲!Top

4 楼sam1111(化神奇为腐朽)回复于 2005-04-04 16:13:20 得分 0

看起来是想用STL,写了一个但是没测试:  
   
  void   Replace(string&   str,   string&   oldStr,   string&   newStr)  
  {  
  basic_string   <char>::size_type   indexCh,   lenNStr,   lenOStr,   off;  
  static   const   basic_string   <char>::size_type   npos   =   -1;  
  const   char*   c   =   "a";  
   
  lenNStr   =   newStr.length();  
  lenOStr   =   oldStr.length();  
  off   =   0;  
  indexCh   =   str.find(oldStr,   off);  
   
  while(indexCh   !=   npos)  
  {  
  if(lenNStr   >   lenOStr)  
  {  
  str.insert(indexCh   +   oldStr.length(),   c,   lenNStr   -   lenOStr);  
  }  
  else   if(lenNStr   <   lenOStr)  
  {  
  str.erase(indexCh   +   lenNStr,   lenOStr   -   lenNStr);  
  }  
  str.replace(indexCh,   lenNStr,   newStr);  
  off   =   indexCh   +   lenNStr;  
  indexCh   =   str.find(oldStr,   off);  
  }  
  }Top

5 楼du51(郁郁思扬)回复于 2005-04-04 16:21:34 得分 0

#include<iostream>  
  using   namespace   std;  
  char   *strreplace(char   *base,char   *oldstr,char   *newstr)  
  {  
          int   base_len=strlen(base);  
          int   oldstr_len=strlen(oldstr);  
          int   newstr_len=strlen(newstr);  
          if(base_len<oldstr_len)return   0;  
          char   *result=new   char[base_len+newstr_len-oldstr_len+1];  
          char   *temp=new   char[base_len+1];  
          char   *p=base;  
          int   i=0;  
          while(*p)  
          {  
                  if(strncmp(p,oldstr,oldstr_len))  
  {  
  result[i++]=*p;  
  p++;  
  }  
                  else    
                  {  
                           
                          strcpy(temp,p+oldstr_len);  
                          strncpy(result+i,newstr,newstr_len);  
                          strcpy(result+i+newstr_len,temp);  
        delete   temp;  
                          return   result;  
                  }  
          }  
          return   0;  
  }          
  int   main()  
  {  
          char   base[]="Hello   Java";  
          char   oldstr[]="Jav";  
          char   newstr[]="C++";  
          cout<<strreplace(base,oldstr,newstr)<<endl;  
          system("PAUSE");  
          return   0;  
  }Top

相关问题

  • 一道面试题
  • 一道面试题????
  • MICROSOFT 面试题一道
  • 一道面试题
  • 一道面试题!
  • 一道面试题
  • 一道面试题
  • 一道面试题
  • 一道面试题
  • 一道面试题

关键词

  • word
  • source
  • lennstr
  • indexch
  • lenostr
  • oldstr
  • newstr
  • len
  • strlen
  • str

得分解答快速导航

  • 帖主:good_0525

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo