2012-06-16 39 views
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.

我猜我在问什么是我如何使它的功能以正确的顺序返回-1和1?

如果你想访问main.cpp和segement.cpp我可以上传文件的地方,因为他们很长,我不想塞满帖子。

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

编辑 * 下面是完整的代码,我们有 http://jsfiddle.net/h5aKN/

的 “HTML” 部分有segement.cpp这是我们所建造的。 和jscript部分有我们的教授建立的a2main.cpp。

+7

'data [0] ==“OOP”;'那个味道。 – chris

+0

我仍然试图更好地理解问题,因为这味道很像一个简单的字符串匹配问题! – trumpetlicks

+2

'if(strstr(&word [i],data [i])!= NULL)'可能不是正确的做法。 – dirkgently

回答

1

data[0] == "OOP";可能不是你想要做的。双===)测试平等,所以在这里如果datadata[0])第一索引处的字符串"OOP"的项目,都是平等的,你正在测试。

在测试运行中,您正在搜寻:word = OOP data[i] =,这意味着word[i]可能定义正确,但data[i]不是。这可以回到上面等效性测试的用法。

如果设置正确初始化data,(正确意思正确分配内存,我不知道在哪里data被实例化),则测试可能会返回-1,因为它会从strstr()得到一个非NULL指针(假设data是正确的类型),i0break ing,并且三元运算符将产生i-1,= -1

所以固定的data可变

初始化/分配而如果你不限制到C风格字符串(字符数组),我使用的std :: string类型及其相关方法(见如果你还没有)。通常好得多与

+0

所以我改变了它到数据[0] =“OOP”,我得到了错误 segment.cpp:90:错误:在'const char [4]'赋值为'char [2000]'时不兼容的类型。我很困惑。 我做了后来改变匹配字符串,然后在我的段类中的.h文件中声明它,这是编译后得到的错误。 – Umeed

+1

尝试使用C++风格的字符串,或查看sprintf的页面http://www.cplusplus.com/reference/clibrary/cstdio/sprintf/和这个问题在数组初始化http://stackoverflow.com/questions/201101/how-to-initialize-an-array-in-c – eqzx

+0

谢谢!然而,我确实将(strstr(&word [i],data [i])更改为(strstr(data [i],word)!= NULL,现在它通过阶段12 ...但我不知道为什么会这样 – Umeed

0

工作,如果你正在传递一个单词列表的功能:

由于使用(strstr(&word[i],data[i]))建议您正在寻找某个字符串在另一字符串。因此,您正在循环查看一系列字符串(单词)。

然后这看起来错误:

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

这里要传递一个字。
其impossable告诉它应该是什么,但一个猜测是:

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

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

+1

看起来这是一个任务,教授可能使用C++教OOP(我怎么猜?),而不是关于char数组的最佳编程实践和字符串c/C++ – eqzx

+0

@ nrhine1:你不能声称教OOP或C++,然后使用const char *。 – Puppy