| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 383 人关注过本帖
标题:字符串 替换问题 帮忙改正~~~
只看楼主 加入收藏
clumt
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-6-6
结帖率:100%
收藏
 问题点数:0 回复次数:0 
字符串 替换问题 帮忙改正~~~

#include <iostream.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
const int maxlen=200;   
class String
{
public:
   
    String(char *str);
    friend ostream& operator <<(ostream& ostr, String &c1);            //输入输出流的重载
    friend istream& operator >>(istream& istr,String &t);
    String repstr(char *c1,char *c2,char *c3);
    int Length()     {return size;}   
   
    void display();
private:
    char *str;
    char *p;
    int size;
};

//定义构造函数
String::String(char *str )
{   p=str;
   int len=strlen(p);                            /* 求p字符串长度 */
   str=new char[len+1];                        /* 申请长度加1的空间,最后一位存放结束标志'\0' */
   strcpy(str,p);                                /* 将字符串p的内容复制到str字符串中 */
     size = len;   
}

String String::repstr(char *c1,char *c2,char *c3)
{
 int num = 0;
 int size = strlen(c1);       //记录源字符串的长度
 int lens = strlen(c2);        //记录需替换字符串的长度
 int lend = strlen(c3);        //记录替换字符串的长度
 char str[100];                   //临时字符串空间
 //遍历源字符串
 for (int i=0;i<size;i++)
 {
  
 int size = strlen(c1);       //记录源字符串的长度
 int lens = strlen(c2);        //记录需替换字符串的长度
 int lend = strlen(c3);        //记录替换字符串的长度
 char str[100];                   //临时字符串空间
 //遍历源字符串
 for (int i=0;i<size;i++)
 {
  int j = 0;      //记录需替换字符串下标
  int start = 0;  //记录需替换字符串在源字符串中位置
  if (c1[i] == c2[j])
  {
   start = i;
   do
   {
    if (j == (lens-1))    //当源字符串中出现需替换字符串时
    {
     num++;            //出现次数加1
     int end = i + 1;  //记录需替换字符串在源串中结束的位置

     if (lend == lens)
     {
      //替换字符串
      for (int k=0;k<lend;k++,start++)
      {
       c1[start] = c3[k];
      }
     }

     else
     {
      //将需替换字符串之后的串保存到临时字符串空间中
      for (int m=0;m<(size+(lend-lens)*num-end);m++,i++)
      {
       str[m] = c1[i+1];
      }

      //替换字符串
      for (int n=0;n<lend;n++,start++)
      {
       c1[start] = c3[n];
      }

      //从临时字符串空间把余下的串放到替换过的源串后面
      for (int p=(start),q=0;p<(size+(lend-lens)*num);p++,q++)
      {
       c1[p] = str[q];
      }
     }
     i = start;      //继续遍历源串
     j = 0;
     continue;
    }
    i++,j++;
   }while (c1[i] == c2[j]);
  }
 }

}
 int size2 = size+(lend-lens)*num;
 cout<<endl<<"替换后的字符串为: ";
 for (i=0;i<size2;i++)
 {
  cout<<c1[i];*p=c1[i];
 }
  return p;
}
void String::display()
{
    cout<<str;    }
    ///////////////////////////////////////输入输出流的重载/////////////////////////////////////////////////////////////

ostream & operator <<(ostream &ostr, String &c1)     /*重载插入运算符为输出流 */
{
    cout<<c1.str;
    return ostr;
}

istream & operator >>(istream &istr, String &t)     /* 重载提取运算符为输入流 */
{
    delete [] t.str;       //释放原来的空间
    t.str=new char[maxlen];
    if (t.str==NULL)
    {
        cerr<<"Allocatino Error"<<endl;
        exit(1);
    }
    istr.getline(t.str,maxlen,'\n');
    t.size=strlen(t.str);    //长度赋值
   
    return istr;
}



int main()
{
    String string1,string2,string3;
   
    cout<<"请输入源字符串: ";
    cin>>string1;
    cout<<"字符串长度为"<<string1.Length()<<endl;
   
    cout<<"请输入需替换字符串: ";
    cin>>string2;
   
    cout<<"请输入替换字符串: ";
    cin>>string3;
   
    cout<<string1.repstr(string1,string2,string3)<endl;

   

   
   return 0;
   
   
}
 
'repstr' : cannot convert parameter 1 from 'class String' to 'char *''repstr' : cannot convert parameter 1 from 'class String' to 'char *'
搜索更多相关主题的帖子: 字符 
2010-06-17 20:23
快速回复:字符串 替换问题 帮忙改正~~~
数据加载中...
 
   



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

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