一道C++题目,两个派生类中第二个派生类的实现有问题,求帮忙看看
#include<iostream>#include<string.h>usingnamespacestd;classStringLF{public:StringLF(c...
#include<iostream>
#include<string.h>
using namespace std;
class StringLF
{
public:
StringLF(char s[],int ii){
strcpy(oString,s);
i=ii;}
void GetLine();
void GetLength();
protected:
char oString[1000];
char cString[2][1000];
int length;
int line;
int i;
};
class WindowsStringLF:public StringLF
{
public:
WindowsStringLF(char s[],int ii):StringLF(s,ii){}
void LF();
void Show();
};
class UnixStringLF:public StringLF
{
public:
UnixStringLF(char s[],int ii):StringLF(s,ii){}
void LF();
void Show();
};
class Run:public WindowsStringLF,public UnixStringLF
{
public:
Run(char s[],int ii):WindowsStringLF(s,ii),UnixStringLF(s,ii){}
void Work();
void Show();
};
void StringLF::GetLength()
{
length=strlen(oString);
}
void StringLF::GetLine()
{
line=1;
for(int k=0;k<2;k++)
{
for(int j=0;j<length;j++)
{
if(cString[k][j]=='\r')
line++;
}
}
}
void WindowsStringLF::LF()
{
for(int j=0;j<i;j++)
{
cString[0][j]=oString[j];
}
cString[0][i]='\r';
cString[0][i+1]='\n';
for(j=i;j<length;j++)
{
cString[1][j-i]=oString[j];
}
}
void WindowsStringLF::Show()
{
for(int j=0;j<i+2;j++)
cout<<cString[0][j];
for(j=0;j<length-i;j++)
cout<<cString[1][j];
}
void UnixStringLF::LF()
{
for(int j=0;j<i;j++)
{
cString[0][j]=oString[j];
}
cString[0][i]='\r';
for(j=i;j<length;j++)
{
cString[1][j-i]=oString[j];
}
}
void UnixStringLF::Show()
{
for(int j=0;j<i+1;j++)
cout<<cString[0][j];
for(j=0;j<length-i;j++)
cout<<cString[1][j];
}
void Run::Work()
{
WindowsStringLF::LF();
WindowsStringLF::GetLine();
UnixStringLF::LF();
UnixStringLF::GetLine();
}
void Run::Show()
{
cout<<"原始字符串字符个数为:"<<endl;
cout<<WindowsStringLF::length<<endl;
cout<<"在Windows上的换行为:"<<endl;
WindowsStringLF::Show();
cout<<"换行后的行数为:"<<WindowsStringLF::line<<endl;
cout<<"在Unix上的换行为:"<<endl;
UnixStringLF::Show();
cout<<"换行后的行数为:"<<UnixStringLF::line<<endl;
}
int main()
{
char st[1000]={0};
int iii=0;
cout<<"请输入字符串:"<<endl;
cin>>st;
cout<<"请输入在第几个字符后换行:"<<endl;
cin>>iii;
Run a(st,iii);
a.WindowsStringLF::GetLength();
a.Work();
a.Show();
return 0;
} 展开
#include<string.h>
using namespace std;
class StringLF
{
public:
StringLF(char s[],int ii){
strcpy(oString,s);
i=ii;}
void GetLine();
void GetLength();
protected:
char oString[1000];
char cString[2][1000];
int length;
int line;
int i;
};
class WindowsStringLF:public StringLF
{
public:
WindowsStringLF(char s[],int ii):StringLF(s,ii){}
void LF();
void Show();
};
class UnixStringLF:public StringLF
{
public:
UnixStringLF(char s[],int ii):StringLF(s,ii){}
void LF();
void Show();
};
class Run:public WindowsStringLF,public UnixStringLF
{
public:
Run(char s[],int ii):WindowsStringLF(s,ii),UnixStringLF(s,ii){}
void Work();
void Show();
};
void StringLF::GetLength()
{
length=strlen(oString);
}
void StringLF::GetLine()
{
line=1;
for(int k=0;k<2;k++)
{
for(int j=0;j<length;j++)
{
if(cString[k][j]=='\r')
line++;
}
}
}
void WindowsStringLF::LF()
{
for(int j=0;j<i;j++)
{
cString[0][j]=oString[j];
}
cString[0][i]='\r';
cString[0][i+1]='\n';
for(j=i;j<length;j++)
{
cString[1][j-i]=oString[j];
}
}
void WindowsStringLF::Show()
{
for(int j=0;j<i+2;j++)
cout<<cString[0][j];
for(j=0;j<length-i;j++)
cout<<cString[1][j];
}
void UnixStringLF::LF()
{
for(int j=0;j<i;j++)
{
cString[0][j]=oString[j];
}
cString[0][i]='\r';
for(j=i;j<length;j++)
{
cString[1][j-i]=oString[j];
}
}
void UnixStringLF::Show()
{
for(int j=0;j<i+1;j++)
cout<<cString[0][j];
for(j=0;j<length-i;j++)
cout<<cString[1][j];
}
void Run::Work()
{
WindowsStringLF::LF();
WindowsStringLF::GetLine();
UnixStringLF::LF();
UnixStringLF::GetLine();
}
void Run::Show()
{
cout<<"原始字符串字符个数为:"<<endl;
cout<<WindowsStringLF::length<<endl;
cout<<"在Windows上的换行为:"<<endl;
WindowsStringLF::Show();
cout<<"换行后的行数为:"<<WindowsStringLF::line<<endl;
cout<<"在Unix上的换行为:"<<endl;
UnixStringLF::Show();
cout<<"换行后的行数为:"<<UnixStringLF::line<<endl;
}
int main()
{
char st[1000]={0};
int iii=0;
cout<<"请输入字符串:"<<endl;
cin>>st;
cout<<"请输入在第几个字符后换行:"<<endl;
cin>>iii;
Run a(st,iii);
a.WindowsStringLF::GetLength();
a.Work();
a.Show();
return 0;
} 展开
1个回答
展开全部
你主要是变量的有效区域没搞清楚,已经帮你改正如下,备注好了:
#include<iostream>#include<string.h>
using namespace std;
class StringLF
{
public:
StringLF(char s[],int ii){
strcpy(oString,s);
i=ii;}
void GetLine();
void GetLength();
protected:
char oString[1000];
char cString[2][1000];
int length;
int line;
int i;
};
class WindowsStringLF:public StringLF
{
public:
WindowsStringLF(char s[],int ii):StringLF(s,ii){}
void LF();
void Show();
};
class UnixStringLF:public StringLF
{
public:
UnixStringLF(char s[],int ii):StringLF(s,ii){}
void LF();
void Show();
};
class Run:public WindowsStringLF,public UnixStringLF
{
public:
Run(char s[],int ii):WindowsStringLF(s,ii),UnixStringLF(s,ii){}
void Work();
void Show();
};
void StringLF::GetLength()
{
length=strlen(oString);
}
void StringLF::GetLine()
{
line=1;
for(int k=0;k<2;k++)
{
for(int j=0;j<length;j++)
{
if(cString[k][j]=='\r')
line++;
}
}
}
void WindowsStringLF::LF()
{
int j;
for(j=0;j<i;j++)//在函数头声明去掉int
{
cString[0][j]=oString[j];
}
cString[0][i]='\r';
cString[0][i+1]='\n';
for(j=i;j<length;j++) //这里的J没定义
{
cString[1][j-i]=oString[j];
}
}
void WindowsStringLF::Show()
{
int j;
for(j=0;j<i+2;j++)
cout<<cString[0][j];
for(j=0;j<length-i;j++)//这里也是
cout<<cString[1][j];
}
void UnixStringLF::LF()
{
int j;
for(j=0;j<i;j++)
{
cString[0][j]=oString[j];
}
cString[0][i]='\r';
for(j=i;j<length;j++)//这里都是这样的错误
{
cString[1][j-i]=oString[j];
}
}
void UnixStringLF::Show()
{
int j;
for(j=0;j<i+1;j++)
cout<<cString[0][j];
for(j=0;j<length-i;j++)//一样的错误
cout<<cString[1][j];
}
void Run::Work()
{
WindowsStringLF::LF();
WindowsStringLF::GetLine();
UnixStringLF::LF();
UnixStringLF::GetLine();
}
void Run::Show()
{
cout<<"原始字符串字符个数为:"<<endl;
cout<<WindowsStringLF::length<<endl;
cout<<"在Windows上的换行为:"<<endl;
WindowsStringLF::Show();
cout<<"换行后的行数为:"<<WindowsStringLF::line<<endl;
cout<<"在Unix上的换行为:"<<endl;
UnixStringLF::Show();
cout<<"换行后的行数为:"<<UnixStringLF::line<<endl;
}
int main()
{
char st[1000]={0};
int iii=0;
cout<<"请输入字符串:"<<endl;
cin>>st;
cout<<"请输入在第几个字符后换行:"<<endl;
cin>>iii;
Run a(st,iii);
a.WindowsStringLF::GetLength();
a.Work();
a.Show();
return 0;
}
追问
谢谢了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询