我一直潜伏在这里很长一段时间,感谢你过去的所有帮助,即使这是我不得不问的第一个问题。
我正在尝试创建一个简单的数据库程序,但我遇到了搜索要求。 搜索时,如果用户不知道某个值,则需要输入问号。如果你知道一部电影来自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;
}
}
感谢您帮助我解决这个问题,通常我从别人那里获得的最大帮助是无用的或侮辱性的。我最需要帮助的是摆脱编译器错误。我无法理解我的生活。
答案 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数组?
编写一个通用函数可能更容易,该函数有两个字符串或任意长度(第二个可以使用通配符)并查看它们是否相等。质量测试首先可以看出两个字符串是否长度相同,如果是,两个字符串中每个位置的字符是否相等,或者第二个字符串中给定位置的字符是否为“?”。您可以使用单个循环并行遍历两个字符串来执行此操作。