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

时间:2014-12-01 18:57:26

标签: c++ arrays visual-studio-2010 struct

我在搜索结构数组时遇到问题。当我通过调试器运行此代码时,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;
 }

编辑因为我意识到我忘记了将数组的大小传递给函数,但仍然会出现同样的问题。

1 个答案:

答案 0 :(得分:0)

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

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

虽然这并没有解决你的问题(只是让它更容易调试)。

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

如果我正在调试这个循环,我会在&#39; if&#39;之前将index,format_guid_names [index] .name和configSource打印到控制台。声明检查。这将告诉你究竟是什么被比较和以什么顺序。