如何在 C++ 中比较两个结构字符串
Posted
技术标签:
【中文标题】如何在 C++ 中比较两个结构字符串【英文标题】:How to compare two structure strings in C++ 【发布时间】:2014-08-19 02:15:33 【问题描述】:好的,所以这周在课堂上我们正在使用数组。我有一个任务要我为一个包含员工 ID、名字、姓氏和工资的员工创建一个结构。然后它让我要求用户输入 5 个不同员工的输入,这些员工都存储在这个结构的数组中,然后要求他们输入搜索字段类型,然后是搜索值。最后,显示所有积极搜索结果的所有信息。
我还是新手,所以我确信它不是一个非常优雅的程序,但我现在要做的是弄清楚如何将用户输入的字符串与存储在结构中的字符串进行比较。 ..我将尝试在下面给出所有相关代码。
struct employee int empid, string firstname, string lastname, float wage ;
employee emparray[] = ;
employee value[] = ;
//Code for populating emparray and structure, then determine search field etc.
cout << "Enter a search value: ";
cin >> value.lastname;
for(i = 0; i < 5; i++)
if(strcmp(value.lastname.c_str, emparray[i].lastname.c_str) == 0)
output();
哪个...我认为可行,但它给了我以下错误..
Error 1 error C3867: 'std::basic_string<_Elem,_Traits,_Alloc>::c_str': function call missing argument list; use '&std::basic_string<_Elem,_Traits,_Alloc>::c_str' to create a pointer to member d:\myfile
有什么想法吗?有没有办法在不完全修改程序的情况下比较两个 .name 标记的字符串?如果您想向我介绍最佳实践,请随意,但也请尝试解决我的特定问题。
【问题讨论】:
我解决了...我不知道如何动态使用点表示法(如在 emparray[i].variable 中),因此我将其拆分为单独的决策语句。姓氏只是我发布的示例 =) 【参考方案1】:应该是:
strcmp(value.lastname.c_str(), emparray[i].lastname.c_str()) == 0)
还请注意,您不必这样做,因为 strcmp
用于 C 样式字符串。由于您使用的是 C++,因此您可以使用 overloaded ==
operator 来比较字符串对象。
即:
value.last_name == emparray[i].lastname
请注意,字符串的重载 ==
运算符不会进行不区分大小写的字符串比较 - 但是,您可以自行实现此类功能。
其他建议:使用 vectors
而不是数组,并且您应该为数组指定大小。
【讨论】:
啊,这是我在这里重新输入代码的错误...忘记了 == 0。我们的书说 == 在比较字符串时不起作用,但也许它意味着字符串字符数组,不是字符串对象,我把它弄混了。是 c_str 末尾的 () 破坏了它...我发现该函数的地方没有列出它们 =/ 谢谢! @Arvandor:即使是我们当中最优秀的人也会发生这种情况;)而且,非常欢迎您。 :)以上是关于如何在 C++ 中比较两个结构字符串的主要内容,如果未能解决你的问题,请参考以下文章
C 或 C++。如何比较给定 char * 指针的两个字符串?