发布答案键的字符串比较(C ++)

时间:2019-03-10 23:39:35

标签: c++ arrays

我正在为我的编码课从事一个期中项目,尽管我已经弄清了很多类似的问题,但我仍在努力比较两个字符串值并确定它们是否相等。有问题的字符串是ANSWERKEYstudentAnswers。前者是一个常量,后者可与之进行比较。

有问题的代码如下。

if (studentAnswers == ANSWERKEY)
    {
        percentScore = 100.0;

        cout << "Score: " << percentScore << " % " << 'A' << endl;
    }

    else if (studentAnswers != ANSWERKEY)
        {
            int count = 0;
            double answerCount = 0.0;
            while (count < ANSWERKEY.length())
                {
                    if (studentAnswers.substr(count, count+1) == ANSWERKEY.substr(count, count+1)
                        {
                            answerCount++;
                            count++;
                        }
                    else
                        {
                            cout << "Incorrect answer." << endl;
                            count++;
                        }
                }
        percentScore = ((answerCount) / (double)ANSWERKEY.length()) * 100.0;
        cout << "Percent score is " << percentScore << "%" << endl;
        }

我面临的确切问题是我无法找到更好的比较字符串的方法。使用当前方法,输出如下:

The intro to the code runs fine. Only when I get to checking the answers against the key, in this case "abcdefabcdefabcdefab", do I run into issues.不管更改了什么字符,程序都会将所有字符的大约一半标记为不匹配,并因此将分数降低。

我曾经考虑过使用一对数组,但是当数组的某些值为空时,我找不到设置数组的解决方案。如果学生的答案太短,例如只有15个字符长,我不知道如何比较空白,甚至不将其存储在数组中。

感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:1)

第一:

if (studentAnswers == ANSWERKEY)
{...}
else if (studentAnswers != ANSWERKEY)
{ ...}
在比较字符串时,

看起来像是一个过大的杀伤力。 else部分在哪里?

第二,这是有风险的。阅读IEE754和有关cancellation甚至是SO的文章:

double answerCount = 0.0;
...
answerCount++

第三:

您正在使用substr逐字符检查。在我看来,就像用锤子杀死细菌一样。

studentAnswers.substr(count, count+1) == ANSWERKEY.substr(count, count+1)

第四:

如果studentAnswers短于ANSWERKEY怎么办?

结论: 您需要弄清输入/期望的输出,并使用调试器更好地了解执行期间发生的情况。在程序的每一步中都要仔细检查所有变量。