qq_39677327 2022-05-15 21:11 采纳率: 94.9%
浏览 57
已结题

数据结构字符串比较问题

已知任意字符串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;
}

  • 写回答

3条回答 默认 最新

  • 关注

    你题目的解答代码如下:

    #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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月23日
  • 已采纳回答 5月15日
  • 创建了问题 5月15日