计算字符串中的单词 - 驼峰式

Counting words in a string - camelCase

Given s, print the number of words in on a new line. For example, s = oneTwoThree . There are 3 words in the string.

我知道我找到了大写字母,但不确定我是否正确计算了单词数。

我错过了什么?

输入

saveChangesInTheEditor

输出

5

现在,我得到 0。

function camelCase(s) {

   let count = 0;

   for(let i of s){

    if(s.charAt(i) === s.charAt(i).toUpperCase()){

      count++

    }
   }
   return count
}

我只看到两个问题。你想要 let i in s,而不是 let i of s。 (前者为您提供索引,而后者为您提供该位置的实际字母)。

第二个问题是您可能希望从 1 开始计数,因为第一个单词总是以小写字母开头。

function camelcase(s) {
   let count = 1;
   for(let i in s){
    if(s.charAt(i) === s.charAt(i).toUpperCase()){
      count++
    }
   }
   return count
}

console.log(camelcase("oneTwoThree"));

如果这是一个编码挑战,您可能需要考虑边缘情况。例如,空字符串的答案应该是什么?您应该为此明确测试吗?输入字符串中是否会有空格、数字或特殊字符?这可能是当前逻辑的问题。

您计算的是大写字母 char,而字符串 oneTwoThree 只有两个大写字母。所以,输出将是 2.

相反,您可以使用正则表达式将字符串拆分为大写。

const s = 'oneTwoThree';

console.log(s.split(/(?=[A-Z])/g).length);

您可以使用正则表达式替换所有 lower case 个字母,然后计算剩余的字母数。

let string1 = "saveChangesInTheEditor";
let string2 = "oneTwoThree";
//For empty Strings
let string3 = "";

function camelcase(s) {
  return (s ? (s.trim().replace(/[^A-Z]/g, "").length + 1) : 0);
}

console.log(camelcase(string1));
console.log(camelcase(string2));
console.log(camelcase(string3));

The below code snippet is for array, you could use this if you want to pass an array. The function will return an array with the world count in the same order.

let arr = ["saveChangesInTheEditor", "oneTwoThree", ""]

function camelcase(s) {
  if (Array.isArray(s)) {
    let camelCase = [];
    for (const string of s) {
      camelCase.push((string ? (string.trim().replace(/[^A-Z]/g, "").length + 1) : 0));
    }
    return camelCase;
  } else {
    return (s ? (s.trim().replace(/[^A-Z]/g, "").length + 1) : 0);
  }
}

console.log(camelcase(arr));