数据结构字符串比较问题

已知任意字符串S1和S2,在串的顺序存储结构上实现S1和S2的比较运算,并返回比较结果。
运行不了帮忙改一改或者重新写一个

#include<iostream>
using namespace std;
class Str
{
public:
    void push();
    int compare(char *s1, char *s2);
    int StrLength(char *str);
    void get(char *a1, char *a2);
private:
    char *s1=new char[100];
    char *s2=new char[100];
};
void Str::get(char *a1, char *a2)
{
    a1 = s1;
    a2 = s2;
}
void Str::push()
{
    cout << "请输入第一个字符串:";
    cin >> s1;
    cout << "请输入第二个字符串:";
    cin >> s2;
}
int Str::StrLength(char *str)
{
    int i = 0;
    while (str[i] !='\0')
    {
        i++;
    }
    return i;
}
int Str::compare(char *s1, char*s2)
{
    int i = 0,ret1=0,ret2=0;
    while (s1[i] != '\0')
    {
        if ((int)s1[i] > (int)s2[i])
            ret1+=(int)s1[i]-(int)s2[i];
        else if ((int)s1[i] < (int)s2[i])
            ret2+=(int)s2[i]-(int)s1[i];
        else
            i++;
    }
    if(ret1>ret2)
    return 1;
    else if(ret2>ret1)
    return -1;
    else if(StrLength(s1) ==StrLength(s2))
        return 0;
    else
        return -1;
}
int main()
{
    char *a1=new char[100];
    char *a2=new char[100];
    Str S;
    S.push();
    S.get(a1,a2);
    switch(S.compare(a1,a2))
    {
    case 1:
        cout << "第一个字符串比第二个字符串大";
        break;
    case -1:
        cout << "第二个字符串比第一个字符串大";
        break;
    case 0:
        cout << "两个字符串相等";
        break;
    }
    return 0;
}

你题目的解答代码如下:

#include<iostream>
using namespace std;
class Str
{
public:
    void push();
    int compare(char *s1, char *s2);
    int StrLength(char *str);
    void get(char *&a1, char *&a2);
private:
    char *s1=new char[100];
    char *s2=new char[100];
};
void Str::get(char *&a1, char *&a2)  //改成引用变量
{
    a1 = s1;
    a2 = s2;
}
void Str::push()
{
    cout << "请输入第一个字符串:";
    cin >> s1;
    cout << "请输入第二个字符串:";
    cin >> s2;
}
int Str::StrLength(char *str)
{
    int i = 0;
    while (str[i] !='\0')
    {
        i++;
    }
    return i;
}
int Str::compare(char *s1, char*s2)
{
    int i = 0;
    while (s1[i] != '\0' && s2[i] != '\0')
    {
        if ((int)s1[i] > (int)s2[i])
            return 1;
        else if ((int)s1[i] < (int)s2[i])
            return -1;
        i++;
    }
    if(StrLength(s1)==StrLength(s2))
        return 0;
    else if(StrLength(s1)>StrLength(s2))
        return 1;
    else
        return -1;
}
int main()
{
    char *a1=new char[100];
    char *a2=new char[100];
    Str S;
    S.push();
    S.get(a1,a2);
    switch(S.compare(a1,a2))
    {
    case 1:
        cout << "第一个字符串比第二个字符串大";
        break;
    case -1:
        cout << "第二个字符串比第一个字符串大";
        break;
    case 0:
        cout << "两个字符串相等";
        break;
    }
    return 0;
}

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

#include<iostream>
using namespace std;
class Str
{
public:
    void push();
    int compare(char *s1, char *s2);
    int StrLength(char *str);
    void get(char *a1, char *a2);
private:
    char *s1=new char[100];
    char *s2=new char[100];
};
void Str::get(char *a1, char *a2)
{
    a1 = s1;
    a2 = s2;
}
void Str::push()
{
    cout << "请输入第一个字符串:";
    cin >> s1;
    cout << "请输入第二个字符串:";
    cin >> s2;
}
int Str::StrLength(char *str)
{
    int i = 0;
    while (str[i] !='\0')
    {
        i++;
    }
    return i;
}
int Str::compare(char *s1, char*s2)
{
    int i = 0,ret1=0,ret2=0;
    while (s1[i] != '\0')
    {
        if ((int)s1[i] > (int)s2[i])
            ret1+=(int)s1[i]-(int)s2[i];
        else if ((int)s1[i] < (int)s2[i])
            ret2+=(int)s2[i]-(int)s1[i];
    //删除else
        i++;
    }
    if(ret1>ret2)
    return 1;
    else if(ret2>ret1)
    return -1;
    else
        return 0;
}
int main()
{
    char *a1=new char[100];
    char *a2=new char[100];
    Str S;
    S.push();
    S.get(a1,a2);
    switch(S.compare(a1,a2))
    {
    case 1:
        cout << "第一个字符串比第二个字符串大";
        break;
    case -1:
        cout << "第二个字符串比第一个字符串大";
        break;
    case 0:
        cout << "两个字符串相等";
        break;
    }
    return 0;
}
 
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632