c++ - 如何在C++中比较两个结构字符串

标签 c++ string structure string-comparison c-strings

好的,这周我们将在类里面学习数组。我有一项任务要求我为一名员工创建一个结构,其中包含员工 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 标记的字符串?如果你想用最佳实践训练我,请随意,但也请尝试解决我的特定问题。

最佳答案

应该是:

strcmp(value.lastname.c_str(), emparray[i].lastname.c_str()) == 0)

另请注意,您不必这样做,因为使用 strcmp 用于 C 风格字符串。由于您使用的是 C++,因此可以使用 overloaded == operator用于比较字符串对象。

即:

value.last_name == emparray[i].lastname

请注意,字符串的重载 == 运算符不会进行不区分大小写的字符串比较 - 但是,您可以自己实现此类功能。

其他建议:使用 vector 代替数组,并且您应该为数组指定一个大小。

关于c++ - 如何在C++中比较两个结构字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25374722/

相关文章:

java - 如何将字符串完美居中 Jpanel 中心

c - 如何比较两个文件中的字符串?

c# - 从 C# 中的 Rust DLL 获取 UTF-8 编码的字符串

C 相同结构不同尺寸

c - 未找到源 chkstk.asm

c++ - 如何找到未初始化的堆栈变量

c++ - Qt : How to get QComboBox item text at an arbitrary index (not the currently selected item)

c++ - 如何专用于模板模板参数

c++ - 什么是三法则?

c - 从线性列表中删除记录的问题 (C)