【问题标题】:How do you compare strings as arguments? [closed]你如何比较字符串作为参数? [关闭]
【发布时间】:2021-05-27 12:05:42
【问题描述】:

我正在尝试编写一个程序来读取姓氏介绍并返回学生的信息(生日、组等)。编译器不识别 == 运算符,我猜它不知道要比较什么,无论是地址还是值?(我会解释一下)

我读过类似的案例,他们建议使用 bool 运算符。据我所知,布尔运算符只返回真或假(我没有看到使用它来打印学生信息的方法)

我也在考虑使用 char 或 strcmp(用于比较的 srting 函数)。

   void find_fam ( struct st student[], int length, string & fam)
    
    {
        for(int i=0; i<length; i++)
            if ( student[i]== fam[i]){
        
        cout << "Student:\n"<< student[i].imia << student[i].otchestvo << student[i].familia << 
student[i].gruppa << student[i].grozhdenia);
                                                             
            }
    }

【问题讨论】:

  • 您能否edit 您的问题并显示minimal reproducible example 任何人都可以完全如图所示 剪切/粘贴,然后编译并获取您的编译错误?显示的内容不足。
  • 你很可能想要if ( student[i].familia == fam)而不是if ( student[i]== fam[i])
  • 在 C++ 中,您不需要在结构的使用前加上 struct,这是隐式的。
  • 您将 std::string 与 struct 进行比较有点奇怪,这是绝对错误的。
  • 提示:使用std::vector&lt;st&gt;for (auto&amp;&amp; student : students),你的论点看起来像const std::vector&lt;st&gt;&amp; students。 C++ 有很多工具可以让你的生活更轻松,比如不必传递单独的长度参数,或者不必敲打student[i] 直到你的手指掉下来。

标签: c++ string if-statement parameters operator-overloading


【解决方案1】:

例如,如果您有这样的结构

struct st
{
    std::string name;
    int age;
};

然后你会想要将fam 与你的结构的那个成员进行比较

if (student[i].name == fam)

所以现在.name 是您要比较的对应std::string。否则,您将尝试将 std::stringst 结构进行比较。

【讨论】:

  • 可以实现operator==,但这可能在这里忽略了重点。
【解决方案2】:

在您展示的这个示例中,您将结构的整个实例与字符串进行比较,这是无效的。 您应该做的是将字符串属性与您输入的字符串进行比较。 假设学生的家庭称为family,是字符串类型:

if(student[i].family==fam)
{
   //statements
}

【讨论】:

    猜你喜欢
    • 2013-01-06
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多