此代码不适用于{“ parses”,“ parsecs”}

时间:2019-12-23 13:55:26

标签: c++ arrays string

INSERT

该程序接受两个字符串的数组,并检查第二个字符串中的字母是否出现在第一个字符串中。

示例: letterCheck([“ trances”,“ nectar”])➞正确

letterCheck([“ compadres”,“ DRAPES”])➞正确

letterCheck([“ parses”,“ parsecs”])➞false

此程序适用于以上给定的对。它对{“ parses”,“ parsecs”}返回true,但应返回false。 有人可以告诉我,代码中的问题是什么,我该怎么做才能解决此问题?

1 个答案:

答案 0 :(得分:1)

当前的问题是您尝试对匹配的字符进行计数,以查看第二个字符串中的所有字符在第一个字符串中是否都匹配。但是,由于第一个字符串中有重复的字符,因此计算会出错:两个’s’的存在使b比您想要的要大。找到角色后,您可以跳出循环来避免问题。

顺便说一句,将未经检查的char传递给tolower()可能会给您带来不确定的行为:在大多数平台上,char已签名,但tolower()上有一个前提条件,要求参数为nin负数或EOF

此外,b < arr[1].length()的结果为bool(尽管需要进行反转):无需编写特殊条件即可将其转换为布尔值。