将字符串c ++与通配符值进行比较

时间:2013-12-04 07:55:13

标签: c++ strncmp

我一直潜伏在这里很长一段时间,感谢你过去的所有帮助,即使这是我不得不问的第一个问题。

我正在尝试创建一个简单的数据库程序,但我遇到了搜索要求。 搜索时,如果用户不知道某个值,则需要输入问号。如果你知道一部电影来自90年代你可以输入199?它会找到所有匹配199_的电影。编译时我不断收到错误,“无法将'char *'转换为'char()[5],将参数'2'转换为'bool compareYears(const char ,char(*)[5] “ 我试图自己解决大部分问题,我喜欢将这些函数分开并使它们在单独的.cpp文件中工作,然后再将它们添加到主文件中,只是为了使调试更容易。

#include <iostream>
#include <cstring>
#include <fstream>
#include <cctype>
using namespace std;

const int yearLength = 4;
typedef char year[yearLength + 1];

bool compareYears(const year year1, year year2[]);

int main()
{
    year year1 = "1992"; //year from database, will be assigned the 
                         //  variable when implemented in main program. 
    year year2;          //year entered by user, it will be compared to year1.

    cout << "Enter a year to search for: ";
    cin >> year2;
    cout << endl;

    if((compareYears(year1, year2)) == true)
        cout << "they match\n";
    if((compareYears(year1, year2)) == true)
        cout << "they do not match\n";

    return 0;
}

bool compareYears(const year year1, year year2[])
{
    for(int i = 0; i < 4; i++)
    {
        if (strncom(year1, year2[i], 4) ==0)
            return true;
        else if (strncmp(year1, "????", 4) == 0)
            return true;
        else
            return false;
    }
}

感谢您帮助我解决这个问题,通常我从别人那里获得的最大帮助是无用的或侮辱性的。我最需要帮助的是摆脱编译器错误。我无法理解我的生活。

3 个答案:

答案 0 :(得分:1)

首先阅读:typedef fixed length array

然后,使用此typedef:

typedef struct year { char characters[4]; } year;

并以这种方式更改代码:

int main()
{
    year year1; 
    year1.characters= "1992"; //year from database, will be assigned the variable when implemented in main program. 
    year year2;          //year entered by user, it will be compared to year1.

    cout << "Enter a year to search for: ";
    cin >> year2.characters;
    cout << endl;

    if((compareYears(year1, year2)) == true)
        cout << "they match\n";
    else
        cout << "they do not match\n";

    return 0;
}

bool compareYears(year year1, year year2)
{
    if (strncom(year1.characters, year2.characters, 4) ==0)
        return true;
    else if (strncmp(year1, "????", 4) == 0)
        return true;
    return false;
}

我还修复了一些逻辑错误

答案 1 :(得分:1)

只需更改这些行就可以了......函数声明需要一年的数组,并且你试图传递一个变量..

if((compareYears(year1, &year2)) == true) //this changed from year2 to &year2
cout << "they match\n";
if((compareYears(year1, &year2)) == true) //this changed from year2 to &year2
cout << "they do not match\n";

答案 2 :(得分:0)

year2的{​​{1}}参数的类型看起来很奇怪。看起来这个参数是要测试的compareYears,即像mask这样的字面年或使用通配符的东西。因此,如何使它成为1992字节的char数组?

编写一个通用函数可能更容易,该函数有两个字符串或任意长度(第二个可以使用通配符)并查看它们是否相等。质量测试首先可以看出两个字符串是否长度相同,如果是,两个字符串中每个位置的字符是否相等,或者第二个字符串中给定位置的字符是否为“?”。您可以使用单个循环并行遍历两个字符串来执行此操作。