如何将统计字符串e/E数量的for循环函数转为while循环?
问题分析与修复
你的while循环代码存在几个关键问题,导致测试用例全部返回0:
- 循环条件错误:你把判断字符是否为
e/E作为while的循环条件,这意味着只要第一个字符不是e/E,循环根本不会执行;就算第一个是,后续逻辑也完全不符合遍历需求。 - 循环内逻辑错误:
index += count的写法毫无意义,应该是每次循环让index自增1来遍历下一个字符;同时没有在循环内更新当前字符char,也没有判断字符是否符合条件来累加count。 - 语法错误:代码末尾多了一个多余的
}。
正确的while循环实现
我们可以完全对应原for循环的逻辑来改写:原for循环的核心是从index=0开始,遍历到index小于字符串长度,每次检查当前字符,符合条件就计数。对应的while循环写法如下:
function eCounter(word) { let count = 0; let index = 0; while (index < word.length) { const char = word[index]; if (char === "e" || char === "E") { count += 1; } index += 1; // 每次循环后移动到下一个字符,避免无限循环 } return count; }; console.log(eCounter("apple")); // => 1 console.log(eCounter("appleapple")); // => 2 console.log(eCounter("Appleee")); // => 3
代码说明
- 循环条件
index < word.length保证我们能遍历字符串的每一个字符,和原for循环的终止条件完全一致。 - 每次循环内先获取当前索引对应的字符,判断是否为
e/E,符合条件就累加计数。 - 必须执行
index += 1,否则索引永远不会变化,会陷入无限循环。
内容的提问来源于stack exchange,提问作者J. Green
相关产品推荐
相关产品推荐

