问题描述
编写一个函数,打印出作为参数传入的数组中的所有单词,这些单词包含一个由 3 个连续字母组成的序列,这些字母也是按字母顺序连续的。例如,应该打印“costume”这个词,而不是“cost”。数组将以 Null 结尾,可用于终止算法
我无法弄清楚为什么我的当前代码没有收到任何输出。我的思考过程是将数组传递的单个字符串中的所有字符转换为它们的 ascii 形式。在 ascii 中,我可以通过添加或减去然后与原始 ascii 字符进行比较来比较连续的字母是否按字母顺序排列。
for(int i = 0; words[i] != '\0'; i++) {
int wordLength = strlen(words[i]);
if(wordLength > 2) {
for(int j = 0; j < wordLength; j++) {
int asciiOne = (int)words[i][j];
int asciiTwo = (int)words[i][j+1];
int asciiThree = (int)words[i][j+2];
if(asciiOne == asciiTwo -1 == asciiThree -2 || asciiOne == asciiTwo -1 == asciiThree -2) {
printf("%s\n",words[i]);
}
}
}
}
解决方法
if(asciiOne == asciiTwo -1 == asciiThree -2 || asciiOne == asciiTwo -1 == asciiThree -2)
这在C中是不正确的。如果满足第一个条件(asciiOne == asciiTwo -1
),那么它会给1。之后,它会检查1 == asciiThree -2
,这当然不是我们想要的。正确的做法是:
if((asciiOne == asciiTwo -1) && (asciiTwo == asciiThree -1))
通过这种方式,它会评估问题中所需的两个条件。
编辑 - 添加了括号以指定将评估条件的顺序。我们也可以删除括号,因为 ==
的优先级高于 &&
。来源 - C Operator Precedence