将客 2024-05-20 21:14 采纳率: 98.8%
浏览 2
已结题

(标签-ar|关键词-字符串)

#include<iostream>
#include <string>
using namespace std;
class String
{public:
String( ){p=NULL;}
String(char *str);
void display( );
// 1、在String类体中声明3个友元函数: 
friend bool operator> (String &string1, String &string2);
friend bool operator< (String &string1, String &string2);
friend bool operator== (String &string1, String& string2);
private:
char *p; // 字符型指针,用于指向字符串
}; 
// 在类外分别定义3个运算符重载函数: 
bool operator>(String &string1,String &string2)  // 对运算符“>”重载
{      if(strcmp(string1.p,string2.p)>0)
return true;
else
return false;
}
bool operator<(String &string1,String &string2)  // 对运算符“<”重载
{     if(strcmp(string1.p,string2.p)<0)
return true;
else
return false;
}
bool operator==(String &string1,String &string2)  // 对运算符“= =”重载
{    if(strcmp(string1.p,string2.p)==0)
return true;
else
return false;     }
/*  增加了一个compare函数,用来对两个字符串进行比较,并输出相应的信息?这样可以减轻主函数的负担,使主函数简明易读?  */
void compare( String &string1, String &string2 )
{    if(operator>(string1,string2)==1)
{ string1.display( ); cout<<">"; string2.display( ); }
else if(operator<(string1,string2)==1)
{  string1.display( ); cout<<"<"; string2.display( ); }
else if(operator==(string1,string2)==1)
{  string1.display( ); cout<<"="; string2.display( ); }
cout<<endl;
}
int main( )
{
String string1("Hello"), string2("Book"), string3("Computer"), string4("Hello");
compare( string1, string2 );
compare( string2, string3 );
compare( string1, string4 );
return 0;
}

为什么这段代码会在if (strcmp(string…)这里显示错误

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-20 21:14
    关注

    引自免费微信小程序:皆我百晓生

    在您提供的C++代码中,编译错误可能出现在if (strcmp(string1.p,string2.p)>0)这一行,因为strcmp()函数返回值是一个整数,而不是布尔值。当您尝试将它与0进行比较时,编译器可能会报错,因为它期望比较的是布尔值(true或false)。要解决这个问题,您可以直接使用strcmp()的结果,因为它的返回值已经明确表示了字符串之间的关系。

    strcmp()函数的返回值规则如下:

    • 如果第一个字符串小于第二个字符串,则返回一个负数。
    • 如果两个字符串相等,则返回0。
    • 如果第一个字符串大于第二个字符串,则返回一个正数。

    因此,您可以直接用strcmp(string1.p,string2.p)的结果来进行条件判断,而不需要与0进行比较。修改后的代码如下所示:

    #include<iostream>
    #include<string>
    using namespace std;
    
    class String
    {
    public:
        String(){p = NULL;};
        String(char *str);
        void display();
        // 友元函数保持不变
    };
    
    // 在类外分别定义3个运算符重载函数:
    bool operator>(String &string1, String &string2)  // 对运算符“>”重载
    {
        return strcmp(string1.p, string2.p) > 0;
    }
    
    bool operator<(String &string1, String &string2)  // 对运算符“<”重载
    {
        return strcmp(string1.p, string2.p) < 0;
    }
    
    bool operator==(String &string1, String &string2)  // 对运算符“=”重载
    {
        return strcmp(string1.p, string2.p) == 0;
    }
    
    /* 增加了一个compare函数,用来对两个字符串进行比较,并输出相应的信息?这样可以减轻主函数的负担,使主函数简明易读?  */
    void compare(String &string1, String &string2)
    {
        if (operator>(string1, string2))
        {
            string1.display(); cout << ">";
            string2.display();
        }
        else if (operator<(string1, string2))
        {
            string1.display(); cout << "<";
            string2.display();
        }
        else if (operator==(string1, string2))
        {
            string1.display(); cout << "=";
            string2.display();
        }
        cout << endl;
    }
    
    int main()
    {
        String string1("Hello"), string2("Book"), string3("Computer"), string4("Hello");
        compare(string1, string2);
        compare(string2, string3);
        compare(string1, string4);
        return 0;
    }
    

    这个修改过的版本应该能正确编译并运行,根据字符串内容的比较结果输出相应的关系符号。

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

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月30日
  • 已采纳回答 5月28日
  • 创建了问题 5月20日

悬赏问题

  • ¥35 navicat将excel中的数据导入mysql出错
  • ¥15 rt-thread线程切换的问题
  • ¥20 python忆阻器数字识别
  • ¥15 高通uboot 打印ubi init err 22
  • ¥20 PDF元数据中的XMP媒体管理属性
  • ¥15 R语言中lasso回归报错
  • ¥15 网站突然不能访问了,上午还好好的
  • ¥15 有没有dl可以帮弄”我去图书馆”秒选道具和积分
  • ¥15 semrush,SEO,内嵌网站,api
  • ¥15 Stata:为什么reghdfe后的因变量没有被发现识别啊