这是一个小组作业,我们的教授将项目延长了一周,这一点变得相当困难。有50个阶段/测试,我们只能达到阶段11,然后功能失败。
这个函数在我们的.cpp文件中(我们肯定是这个函数引起了问题,因为当我们改变它的部分时,它会影响我们已经通过的第11阶段。)
int segment::match(const char word[]) {
int i;
cout << data[0];
data[0] == "OOP";
cout << data[0];
for(i=0;i<NUM_MAX;i++) {
cout << "word = " << &word[i] << " data[i] = " << data[i];
if(strstr(&word[i],data[i])!= NULL)
break;
}
return i==NUM_MAX ? 1 : i-1;
从main.cpp(作为作业提供给我们)这是我们要完成的目标
通过测试11 ...
Your match( ) return value ----> -1
Actual match( ) return value --> -1
Press the ENTER key to continue...
word = OOP data[i] =
Failed while testing the match( )
function... Failed on test 12...
Your match( ) return value ----> -1
Actual match( ) return value --> 1
Press the ENTER key to continue...
You passed 11/50 tests...
Your program is 22.00% complete!
Your program still needs some work!
Keep at it!
该函数假设要做的是检查“oop”,如果它不存在则退出-1,如果它在那里它应该返回true为1。
我想我要问的是如何使该函数以正确的顺序返回-1和1?
如果您想访问main.cpp和segement.cpp,我可以将其作为文件上传到某处,因为它们很长并且我不想填写帖子。
感谢任何帮助,谢谢。
修改 的 * 这是我们的完整代码 http://jsfiddle.net/h5aKN/
“html”部分有segement.cpp,这是我们构建的。 并且jscript部分有a2main.cpp,这是我们教授建立的。
答案 0 :(得分:1)
data[0] == "OOP";
可能不是你想要做的。双=
(==
)测试相等性,所以在这里测试第一个索引为data
(data[0]
)的项和字符串{{ 1}}是平等的。
在测试运行中,您正在尝试:"OOP"
,这意味着word = OOP data[i] =
可能已正确定义,但word[i]
未正确定义。这可以追溯到上面等效测试的用法。
如果正确设置初始化data[i]
,(正确意味着正确分配内存,我不知道data
在哪里实例化),那么测试可能会返回-1,因为它会得到来自data
调用的非NULL指针(假设strstr()
是正确的类型),data
i
0
和{3}}会产生break
,= i-1
。
因此,修复-1
变量
如果您不限于c样式字符串(char数组),我将使用std :: string类型及其相关方法(如果您还没有,请参阅the c++ string reference)。通常可以更好地使用
答案 1 :(得分:0)
如果要将单词列表传递给函数:
正如使用(strstr(&word[i],data[i])
)表明你正在寻找另一个字符串中的字符串。因此,您循环遍历字符串(单词)列表。
然后这看起来不对:
int segment::match(const char word[]) {
在这里你传递一个词 它不可能告诉它应该是什么,但猜测将是:
int segment::match(const char* word[]) {
// ^^^^^
但说实话,整个事情是相当难看的C ++。如果你正在写C,我会说没问题,但如果你正确地编写了C ++,那么类型系统可以让你免于所有这些问题。使用std :: string来表示单词。