字符串 替换问题 帮忙改正~~~
#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 *'