一道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;
}
展开
 我来答
百度网友af6bb57
推荐于2016-11-09 · TA获得超过537个赞
知道小有建树答主
回答量:789
采纳率:100%
帮助的人:227万
展开全部
你主要是变量的有效区域没搞清楚,已经帮你改正如下,备注好了:
#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;
}
追问
谢谢了
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式