我正在为我的编码课从事一个期中项目,尽管我已经弄清了很多类似的问题,但我仍在努力比较两个字符串值并确定它们是否相等。有问题的字符串是ANSWERKEY
和studentAnswers
。前者是一个常量,后者可与之进行比较。
有问题的代码如下。
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个字符长,我不知道如何比较空白,甚至不将其存储在数组中。
感谢您提供的任何帮助。
答案 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
怎么办?
结论: 您需要弄清输入/期望的输出,并使用调试器更好地了解执行期间发生的情况。在程序的每一步中都要仔细检查所有变量。