C++ 获取结构c+中元素的索引+;
我想获取结构中元素的索引。下面是代码。但是,它只返回0作为输出。假设我在下面的结构中添加了数据,函数find_index不会返回元素的索引,它只返回0C++ 获取结构c+中元素的索引+;,c++,indexing,struct,element,C++,Indexing,Struct,Element,我想获取结构中元素的索引。下面是代码。但是,它只返回0作为输出。假设我在下面的结构中添加了数据,函数find_index不会返回元素的索引,它只返回0 struct Person{ string name; int age; float spread_prob; float disease_prob; float recover_prob; status disease_status; int sick_day; }; Person pe
struct Person{
string name;
int age;
float spread_prob;
float disease_prob;
float recover_prob;
status disease_status;
int sick_day;
};
Person person[9];
int find_index(string m){
for(i=0;i<9;i++){
if(m==person[i].name){
return i;
}
}
return 0;
}
struct-Person{
字符串名;
智力年龄;
浮动扩散问题;
漂浮病;
浮子回收问题;
疾病状态;
国际病假日;
};
个人[9];
int find_索引(字符串m){
对于(i=0;ireturn 0
在for循环中。因此,当第一次迭代匹配时,return i
是return0
,如果不是这样,则调用return 0
。将return 0
移出循环,这样循环在一次迭代后不会中断。return 0
在for循环中r循环。因此,当第一次迭代匹配时,return i
为return0
,如果不是这样,则调用return 0
。将return 0
移出循环,这样循环在一次迭代后不会中断。首先,代码存在语法错误,例如循环变量i
未被反求错误和逻辑错误,例如在for循环中返回0(这意味着无论任何索引匹配如何,函数都只返回0)返回0本身是一个错误,因为这意味着在第一个索引中找到了字符串或名称。如果不遵循数组索引,请考虑将“<代码> + 1 < /代码>添加到返回语句中。否则,使用其他代码,如<代码> -1 < /代码>或任何负数,以指示在任何索引中找不到/匹配字符串。
其次,您的代码没有在适当的范围内定义(可以直接复制粘贴并在我们的编译器上测试)
考虑到Person
对象位于main()
中,我在主作用域中创建了一个lambda/临时函数,它可以帮助您解决问题:(考虑struct的name
成员和3个Person
对象数组进行演示)
#包括
结构人
{
std::字符串名;
};
int main()
{
个人[3];
人员[0]。姓名=“卡尔”;
person[1]。name=“John”;
人员[2]。姓名=“Felix”;
自动findIndex=[=](标准::字符串m)
{for(int i=0;i<3;i++)
{if(m==person[i].name)
返回i;
}
返回-1;
};
std::cout首先,您的代码存在语法错误,例如未定义循环变量i
,以及逻辑错误,例如在for循环中返回0(这意味着无论任何索引匹配如何,您的函数都只返回0)返回0本身是一个错误,因为这意味着在第一个索引中找到了字符串或名称。如果不遵循数组索引,请考虑将“<代码> + 1 < /代码>添加到返回语句中。否则,使用其他代码,如<代码> -1 < /代码>或任何负数,以指示在任何索引中找不到/匹配字符串。
其次,您的代码没有在适当的范围内定义(可以直接复制粘贴并在我们的编译器上测试)
考虑到Person
对象位于main()
中,我在主作用域中创建了一个lambda/临时函数,它可以帮助您解决问题:(考虑struct的name
成员和3个Person
对象数组进行演示)
#包括
结构人
{
std::字符串名;
};
int main()
{
个人[3];
人员[0]。姓名=“卡尔”;
person[1]。name=“John”;
人员[2]。姓名=“Felix”;
自动findIndex=[=](标准::字符串m)
{for(int i=0;i<3;i++)
{if(m==person[i].name)
返回i;
}
返回-1;
};
std::coutint find_索引(字符串m){
int ret=-1;/-1表示不可用
对于(i=0;iint find_索引(字符串m){
int ret=-1;/-1表示不可用
对于(i=0;iWHES/WHORD <代码>人<代码> >定义什么?请扩展您的问题,使其在代码中包含大量错误,包括<代码> i <代码>未被定义,函数的范围未被阐明(如果主在考虑使用lambda访问结构)以及不必要地使用诸如return 0之类的语句。@Anirban166这只是我代码的一个片段,我已经在代码中定义了I。函数不在main中。您确定m的值正好等于数组中的某个人吗?确实是std::string::operator==严格比较值,例如,“Aileen”不等于“Aileen\0”,即使您会在输出中看到它们是相同的。返回0作为未找到值似乎很奇怪,因为它是一个有效的索引,所以您不知道是否未找到值,或者第一个元素是否正确。person
定义在哪里/如何定义?您用什么来称呼它?请展开您的问题,使其成为代码中的大量错误,包括g <代码> i < />代码未被定义,函数的范围未被阐明(如果它主要在考虑使用lambda访问结构)以及不必要地使用诸如return 0之类的语句。@Anirban166这只是我代码的一个片段,我已经在代码中定义了I。函数不在main中。您确定m的值正好等于数组中的某个人吗?确实是std::string::operator==严格比较值,例如,“Aileen”不等于“Aileen\0”,即使您会在输出中看到它们是相同的。将0作为未找到值返回似乎很奇怪,因为它是一个有效的索引,所以您不知道是否未找到值,或者第一个元素是否正确。因此,我将它放在for循环之外,它仍然返回0;我不知道您使用的示例名称,以帮助您了解更多信息。如果您也这样做,这将非常有用张贴您如何填写示例中的person
-变量以及m
是什么。您还可以在要签出的if条件中添加打印输出,值是什么
2
-1
int find_index(string m){
int ret = -1; // -1 denotes not available
for(i=0;i<9;i++){
if(m==person[i].name){
ret = i;
break;
}
}
return ret ; //If it matches it will return the index on which it breaks.
}