Hackerrank题:JS分离打印字符串元音辅音时辅音无法输出
问题背景
完成Hackerrank平台的字符串分类题目:要求识别给定字符串中的元音、辅音,保持原有字符顺序,将两类字符分别逐行打印。现有代码可以正常输出所有元音,但辅音始终无法正常打印,原代码如下:
const vowels = 'aeiou' var consonants = [] for (var i=0;i<s.length;i++) { if(vowels.includes(s[i])) {console.log(s[i]) } else { consonants+= s[i] + '\n' } } }
错误原因
- 最核心的问题是辅音收集完成后没有执行输出操作:所有辅音字符被拼接到
consonants变量后,循环结束逻辑就直接终止了,没有调用打印方法输出变量中存储的辅音内容,这是看不到辅音输出的根本原因。 - 变量使用不规范:初始将
consonants声明为数组类型,后续却使用+=运算符做字符串拼接,JS虽然不会抛出语法错误,但这种跨类型操作很容易引发非预期的逻辑问题。 - 额外隐患:现有判断逻辑只匹配小写元音,如果输入包含大写
AEIOU会被错误判定为辅音,如果题目要求不区分大小写识别元音,需要补充转换逻辑。
修正方案
方案1:保持原有收集逻辑,补充输出步骤
把consonants直接声明为字符串类型,循环结束后统一打印收集到的内容即可:
const vowels = 'aeiou' let consonants = '' // 声明为字符串类型,避免类型混用 for (let i = 0; i < s.length; i++) { // 如果需要不区分大小写判断元音,就用s[i].toLowerCase()做匹配,不需要就直接用s[i] if (vowels.includes(s[i].toLowerCase())) { console.log(s[i]) } else { // 如果题目要求排除空格、标点等非字母字符,可以在这里加正则判断过滤 consonants += s[i] + '\n' } } // 补充打印逻辑,trim用来去掉最后多余的换行符 console.log(consonants.trim())
方案2:简化逻辑,无需额外存储变量
不需要单独存辅音,判断为辅音时直接逐行打印即可,代码更简洁:
const vowels = 'aeiou' for (let i = 0; i < s.length; i++) { const curChar = s[i].toLowerCase() if (vowels.includes(curChar)) { console.log(s[i]) } else { // 按需加非字母过滤逻辑 console.log(s[i]) } }
内容的提问来源于stack exchange,提问作者Süleyman Eminbəyli
相关产品推荐
相关产品推荐

