我正在为课堂写一个程序。它需要一个句子并将其翻译成伪日语(使用英语单词但重新排列成语法顺序并将后缀添加到相关单词中)。
库是有限的,我们不能使用函数或数组(低级别)。在这种情况下,我输入句子:
“是男人红”(没有引号)
程序正确解析单词。即每个单词周围都没有空格。
这是我的代码
if (word1 == "is")
{
question = "is-ka";
//If the second word is a subject, assign it and continue
//assigning the 3rd or 4th word as the object or adjective and kick out
//an error if not
if (word2 == string("man") || word2 == string("woman") || word2 == string("fish"))
{
subject = word2 + "-ga";
if (word3 == "man" || word3 == "woman" || word3 == "fish")
{
object = word3 + "-o";
sentence = subject + ' ' + object + ' ' + question;
cout << sentence << endl;
}
if (word3 == "red" || word3 == "short" || word3 == "strong")
{
adj = word3;
sentence = subject + ' ' + adj + ' ' + question;
cout << sentence << endl;
}
else
{
cout << "This is not a proper Eng-- sentence." << endl;
cout << "2 The sentence lacks a proper object." << endl;
}
}
我测试第一个单词是'是',因为这是我们给出的唯一问题格式。鉴于这是一个问题,我继续找到必须在句子中的主语,宾语和形容词,以使其在语法上正确。
第一个和第二个条件为“是男人红”通过,但是 当“是男人红”的条件测试时,如果第三个单词是“红色”,它会跳到else语句并显示错误。
为什么条件跳过应该是真的?
跑步示例:
Enter an Eng-- sentence you would like to translate
is man red
These are the words collected
Spaces after the colons and period at end of word are added.
First word: is.
Second word: man.
Third word: red.
This is not a proper Eng-- sentence.
2 The sentence lacks a proper object.
我希望这就是你们一直要求的。完整代码并使用上面的输入进行编译
答案 0 :(得分:2)
这里的问题是word3
并没有以一种特别令人困惑的方式包含它看起来的确切内容。读入它的代码看起来像这样
//Word 3
while(userSent[index] != ' ' && index <= sentLength)
{
word3 += userSent[index];
index++;
}
条件index <= sentLength
应该是index < sentLength
,因为C ++字符串的从零开始索引。使用<=
循环体还会将userSent
的终止零字节附加到word3
。您可以通过查看word3.length()
来了解这种情况。使用cout
&#39; s operator<<
打印字符串时,额外的0字节无效,但它确实阻止字符串与"red"
相等。