创建一个函数来匹配main中的字符串

时间:2012-06-16 17:56:10

标签: c++ string-matching

这是一个小组作业,我们的教授将项目延长了一周,这一点变得相当困难。有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,这是我们教授建立的。

2 个答案:

答案 0 :(得分:1)

data[0] == "OOP";可能不是你想要做的。双===)测试相等性,所以在这里测试第一个索引为datadata[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来表示单词。