0

这是一项小组作业,我们的教授将项目延长了 1 周,这变得相当困难。有 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退出,如果存在,则应以1返回true。

我想我要问的是如何使该函数以正确的顺序返回-1和1?

如果您想访问 main.cpp 和 segement.cpp,我可以将其作为文件上传到某处,因为它们很长,我不想塞满帖子。

任何帮助表示赞赏,谢谢。

编辑* 这是我们拥有的完整代码 http://jsfiddle.net/h5aKN/

“html”部分包含我们构建的 segement.cpp。jscript 部分有 a2main.cpp,这是我们教授构建的。

4

2 回答 2

1

data[0] == "OOP";可能不是你想要做的。double =( ==) 测试是否相等,因此在这里您要测试data( data[0]) 的第一个索引处的项目和字符串"OOP"是否相等。

在测试的运行中,您正在 cout'ing: word = OOP data[i] =,这意味着它word[i]可能被正确定义,但data[i]不是。这可以追溯到上面等价测试的用法。

如果您data正确设置初始化,(正确意味着正确分配内存,我不知道在哪里data实例化),那么测试可能会返回 -1,因为它会从strstr()调用中获得一个非 NULL 指针(假设这data是正确的type),i0on breaking,三元运算符将 yield i-1, = -1

所以修复data变量的初始化/赋值

如果您不限于 c 样式字符串(char 数组),我会使用 std::string 类型及其相关方法(如果您还没有,请参阅c++ 字符串参考)。通常更好地工作

于 2012-06-16T18:22:14.807 回答
0

如果您将单词列表传递给函数:

由于 ( strstr(&word[i],data[i])) 的使用表明您正在另一个字符串中寻找一个字符串。因此,您正在遍历字符串(单词)列表。

那么这看起来是错误的:

int segment::match(const char word[]) {

在这里你传递一个字。
不可能说出它应该是什么,但猜测是:

int segment::match(const char* word[]) {
                   //      ^^^^^

但老实说,整个事情都是相当丑陋的 C++。如果你在写 CI 会说很好,但如果你一直在正确地写 C++,那么类型系统会让你免于所有这些问题。使用 std::string 来表示单词。

于 2012-06-16T18:22:54.153 回答