C++ 如何在结构数组中搜索

C++ How to search inside an array of structs?

本文关键字:数组 搜索 结构 C++      更新时间:2023-10-16

我在结构数组内部搜索时遇到问题。 当我通过调试器运行此代码时,for 循环不会在数组中前进,而是卡在数组的第一个元素上,并不断将第一个值与 configSource 变量进行比较。 数组中有 44 个元素。 似乎我正在正确进行搜索,我应该在由结构组成的数组上使用不同的语法吗?

我基本上是一个初学者,非常感谢任何帮助。

int arraySize;
std::wstring configSource;
struct NamedGuid 
{
    std::wstring name;
    GUID const *guid;
};
NamedGuid format_guid_names[] = 
{
    {TEXT("CompNTSCCCIR"), &INPUT_CompNTSCCCIR},
    {TEXT("CompNTSCSqPixel"), &INPUT_CompNTSCSqPixel},
    {TEXT("SVideoNTSCCCIR"), &INPUT_SVideoNTSCCCIR},
    .
    etc...
    .
    {TEXT("DigitalHD"),  &INPUT_DigitalHD},
    {TEXT("HDSDI"),  &INPUT_HDSDI},
    {TEXT("HDSDI10Bit"),  &INPUT_HDSDI10Bit},
    {TEXT(""), nullptr} 
};
long OpenDevice (std::wstring argTemps)
{
    //A lot of code which isn't relevant
    //Parses the command line arguments and creates a string that
    //is searched for in the array
    configSource = parseArgs(argTemp);
    int arraySize = _countof(format_guid_names); 
    GUID sourceGuid = get_format_guid_by_name(configSource, arraySize);
    hSrc = dpSetDeviceInput(hDevice, &sourceGuid, 0, 0);
    //More code that isn't relevant
}
GUID get_format_guid_by_name(std::wstring configSource, int arraySize)
{
    for (int index = 0; index < arraySize; index++)
    {
        if (format_guid_names[index].name == configSource)
            return *format_guid_names[index].guid;
    }
    return *format_guid_names[arraySize - 1].guid;
 }

编辑是因为我意识到我忘记将数组的大小传递给函数,但同样的问题仍在发生。

您的get_format_guid_by_name函数没有命名其输入参数,这就是为什么您必须分配给全局变量才能调用该函数的原因。您应该删除全局定义并将输入参数命名为函数:

GUID get_format_guid_by_name(const std::wstring& configSource, int arraySize)

但这并不能解决您的问题(只是使调试更容易)。

你说'它卡在数组的第一个元素上,并不断将第一个值与 configSource 变量进行比较'。这告诉我 configSource 不会 == format_guid_names数组中的任何名称。您的 for 循环看起来正确。

如果我正在调试这个循环,我会在"if"语句检查之前将索引、format_guid_names[index].name 和 configSource 打印到控制台。这将准确地告诉您正在比较的内容以及以什么顺序进行比较。