首页 > 解决方案 > 问题比较答案键的字符串 (C++)

问题描述

我正在为我的编码课程做一个中期项目,虽然我已经解决了大部分问题,但我正在努力比较两个字符串值并确定它们是否相等。有问题的字符串是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;
        }

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

代码介绍运行良好。只有当我根据密钥(在本例中为“abcdefabcdefabcdefab”)检查答案时,我才会遇到问题。无论更改了哪些字符,程序都会将大约一半的字符标记为不匹配,并因此降低分数。

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

感谢您提供的任何帮助。

标签: c++arrays

解决方案


第一的:

if (studentAnswers == ANSWERKEY)
{...}
else if (studentAnswers != ANSWERKEY)
{ ...}

比较字符串时看起来有点矫枉过正。零件在哪里else

其次,这是有风险的。阅读IEE754和有关取消甚至SO的文章:

double answerCount = 0.0;
...
answerCount++

第三:

您正在使用 substr 逐个字符地检查。对我来说,感觉就像用锤子杀死细菌。

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

第四:

如果studentAnswers比 短ANSWERKEY怎么办?

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


推荐阅读