Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 获取结构c+中元素的索引+;_C++_Indexing_Struct_Element - Fatal编程技术网

C++ 获取结构c+中元素的索引+;

C++ 获取结构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

我想获取结构中元素的索引。下面是代码。但是,它只返回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 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
是return
0
,如果不是这样,则调用
return 0
。将
return 0
移出循环,这样循环在一次迭代后不会中断。

return 0
在for循环中r循环。因此,当第一次迭代匹配时,
return i
为return
0
,如果不是这样,则调用
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::cout
int find_索引(字符串m){
int ret=-1;/-1表示不可用
对于(i=0;i
int 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.
}