首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于在数据结构中的"“之间查找字符串的代码

用于在数据结构中的"“之间查找字符串的代码
EN

Stack Overflow用户
提问于 2012-03-24 18:18:25
回答 3查看 94关注 0票数 0

我需要帮助来解决以下问题:

假设我在int var中有一个数字70368,我想在下面的结构中找到相应的字符串"EVT_ACP_CAPT_MIC_FLT“,并将它(包括"")加载到char*事件变量中

代码解决方案必须适用于长度在1到5之间的任何数字。

代码语言:javascript
复制
struct NameOffset TestEvents[] = {

    { "EVT_ACP_CAPT_LAST1", 70387 },
    { "EVT_ACP_CAPT_LAST1", 70387 },
    { "EVT_ACP_CAPT_LAST2", 70512 },
    { "EVT_ACP_CAPT_LAST2", 70512 },
    { "EVT_ACP_CAPT_MASK_BOOM_SWITCH", 70385 },
    { "EVT_ACP_CAPT_MIC_FLT", 70368 },
    { "EVT_ACP_CAPT_MIC_HF1", 70510 },
    { "EVT_ACP_CAPT_MIC_HF2", 70511 },
 };

这张表真的很长,这只是几行来显示结构。

EN

回答 3

Stack Overflow用户

发布于 2012-03-24 18:24:44

假设struct NameOffset的字段是NameOffset,您可以使用循环查找匹配项,如下所示:

代码语言:javascript
复制
for (int i = 0 ; i != sizeof(TestEvents)/sizeof(struct NameOffset) ; i++) {
    if (PmdgEvents[i].Offset == intVar) {
        printf("%s\n", PmdgEvents[i].Name);
        break;
    }
}
票数 1
EN

Stack Overflow用户

发布于 2012-03-24 18:27:25

暴力方法是使用循环并比较第二个结构成员来识别正确的结构。

如果代码将定期执行,则应该使用unordered_map:将数据加载到unordered_map<int, string> (如果愿意,也可以使用char *而不是string ),然后使用

代码语言:javascript
复制
event_map[code];

来访问该字符串。

代码语言:javascript
复制
#include <unordered_map>
#include <iostream>

using namespace std;

struct NameOffset {
    const char *event;
    int code;
};

struct NameOffset TestEvents[] = {
    { "EVT_ACP_CAPT_LAST1", 70387 },
    { "EVT_ACP_CAPT_LAST2", 70512 },
    { "EVT_ACP_CAPT_MASK_BOOM_SWITCH", 70385 },
    { "EVT_ACP_CAPT_MIC_FLT", 70368 },
    { "EVT_ACP_CAPT_MIC_HF1", 70510 },
    { "EVT_ACP_CAPT_MIC_HF2", 70511 },
 };

#define N_ELEMENTS (sizeof(TestEvents) / sizeof(NameOffset))

int main() {
    unordered_map<int, const char *> event_map;
    for (NameOffset *it = TestEvents, *it_end = TestEvents + N_ELEMENTS;
            it != it_end; ++it) {
        event_map[it->code] = it->event;
    }

    cout << event_map[70387] << endl;
    cout << event_map[70512] << endl;
    cout << event_map[70385] << endl;
    cout << event_map[70368] << endl;
    cout << event_map[70510] << endl;
    cout << event_map[70511] << endl;
    return 0;
}
票数 0
EN

Stack Overflow用户

发布于 2012-03-24 18:44:17

创建<int,string>地图,然后使用要搜索的相应值为地图建立索引

代码语言:javascript
复制
#include<iostream>
#include<map>
#include<string>
using namespace std;    
int main (){    
    std::pair<int,string> TestEvents[] = {
    make_pair( 70387,"EVT_ACP_CAPT_LAST1"  ),
    make_pair( 70???,"EVT_ACP_CAPT_LAST1"  ),
    make_pair( 70512,"EVT_ACP_CAPT_LAST2"  ),
    make_pair( 70512,"EVT_ACP_CAPT_LAST2"  ),
    make_pair(  70385, "EVT_ACP_CAPT_MASK_BOOM_SWITCH" ),
    make_pair( 70368,"EVT_ACP_CAPT_MIC_FLT"  ),
    make_pair( 70510,"EVT_ACP_CAPT_MIC_HF1"  ),
    make_pair( 70511,"EVT_ACP_CAPT_MIC_HF2"  )
    };
    map<int,string> mapTestEvents(TestEvents,TestEvents + sizeof TestEvents / sizeof TestEvents[0]);
    int var = 70368;
    const char* event = mapTestEvents[var].c_str();
    return 0;
    }

请注意,我假设整数值是唯一的,否则整个问题陈述将是无效的。

另一种方法是使用std::sort和std::lower_bound

代码语言:javascript
复制
#include<iostream>
#include<map>
#include<string>
#include<algorithm>
using namespace std;
struct NameOffset {
    string name;
    int offset;
    };
NameOffset TestEvents[] = {

    { "EVT_ACP_CAPT_LAST1", 70387 },
    { "EVT_ACP_CAPT_LAST1", 70387 },
    { "EVT_ACP_CAPT_LAST2", 70512 },
    { "EVT_ACP_CAPT_LAST2", 70512 },
    { "EVT_ACP_CAPT_MASK_BOOM_SWITCH", 70385 },
    { "EVT_ACP_CAPT_MIC_FLT", 70368 },
    { "EVT_ACP_CAPT_MIC_HF1", 70510 },
    { "EVT_ACP_CAPT_MIC_HF2", 70511 },
    };
bool CompareByEvent(NameOffset const& lhs, NameOffset const& rhs) {
    return lhs.offset < rhs.offset;
    }
int main (){
    sort(TestEvents,TestEvents + sizeof TestEvents / sizeof TestEvents[0], &CompareByEvent);
    NameOffset var = {"",70510};
    const char* event =lower_bound(TestEvents,TestEvents + sizeof TestEvents / sizeof TestEvents[0], var,&CompareByEvent)->name.c_str();
    return 0;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9850905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档