数字の8の個数を求めて、奇怪な数字の問題を製造します


1)1~10000個の数字のうち8個を獲得(Google)


1から10000まで何回8という数字が出ますか?評価関数を完了します.
ただし、8を含む数字の個数を計算するのではなく、すべての8の数字を計算します.例えば、8808は38888で4であるべきである.
(hint)文字列のn番目の文字:str.charat(n)またはstr[n]
function getCount8 () {
  var str = '';
  for (var i = 1; i <= 10000; i++) {
    str += i;
  }

  var count = 0;
  for (var i = 0; i < str.length; i++) {
    if (str[i] === '8') count++;
  }

  return count;
}
console.log(getCount8()); // 4000

2)変な文字を作成する


toWeirdCase関数は文字列をパラメータとして渡します.文字列sでは、各単語の偶数番目のインデックス文字を大文字、奇数番目のインデックス文字を小文字で置き換えた文字列を返す関数を完了します.
たとえば、sが「hello world」の場合、最初の単語は「hello」で、2番目の単語は「World」で、「Hello World」に戻ります.
注意)文字列全体のパリティインデックスではなく、単語(スペース基準)に基づいてパリティインデックスを判断します.

プール試行1

function toWeirdCase(s) {
  var str ='';   // 변경된 문자열을 담을 변수선언 및 빈 문자열로 초기화
  var index = 0; //단어별 짝/홀수 인덱스를 담을 변수선언

  for (var i = 0; i < s.length; i++) {
    if (s[i] === ' ') {  // 띄어쓰기 만나면
      str += s[i];  // 띄어쓰기 문자 그대로 str에 더하기
      index = 0;  // 홀/짝 index를 0으로 초기화
    } else {
        if (index % 2 === 0) { // 짝수index면
          if (s[i] >= 'a' && s[i] <= 'z') {  // 소문자면
            str += String.fromCharCode(s[i].charCodeAt(0) - 32);  // 대문자로 바꾸고 str에 더하기
          } else {
            str += s[i];  // 대문자면 그냥 그대로 str에 더하기
          }
          index ++;
        } else {  // 홀수index면
          if (s[i] >= 'A' && s[i] <= 'Z') {  // 대문자면
            str += String.fromCharCode(s[i].charCodeAt(0) + 32);  // 소문자로 바꾸고 str에 더하기
          } else {
            str += s[i];  // 소문자면 그냥 그대로 str에 더하기
          }
          index++;
        }
    }
  }

  return str;
}
console.log(toWeirdCase('hello world'));    // 'HeLlO WoRlD'
console.log(toWeirdCase('my name is lee')); // 'My NaMe Is LeE'
  • 返す新しい文字列を作成します.(文字列は配列のようにインデックス値に1つずつアクセスできますが、元の値であるため、各文字を変更することはできません.そのため、新しい文字列を作成し、加算方法として使用します.)
  • 文字列全体のパリティインデックスではなく、単語(スペース基準)からパリティインデックスを判断するため、各単語のindexを0に初期化するには、index変数を再宣言する必要がある.
  • indexに1ずつ加え、スペース文字に遭遇した場合はindex値を0に初期化します.
  • 各文字は、ASKIコードのサイズと比較することにより、現在の文字が属する範囲が大文字範囲か小文字範囲かを決定し、ASKI値に変換して32に加え、文字列を単一/偶数インデックスに変換するか、追加を継続する.
  • 問題の解き方を試みる

    function toWeirdCase(s) {
      var str ='';
      var words = s.split(' ');
    
      for (var i = 0; i < words.length; i++) {
        for (var j = 0; j < words[i].length; j++) {
          if(j % 2 === 0) {
              str += words[i][j].toUpperCase();
          } else {
              str += words[i][j].toLowerCase();
          }
        }
        str += ' ';
      }
    
      return str;
    }
    console.log(toWeirdCase('hello world'));    // 'HeLlO WoRlD'
    console.log(toWeirdCase('my name is lee')); // 'My NaMe Is LeE'
    アルファベットの大文字と小文字を変換するために、Askyコードの増減演算ではなくString法( String.prototype.toUpperCaseString.prototype.toLowerCase)を用いた.
  • 各単語インデックスを決定するためのindex変数ではなく、各文字列からなる配列をスペース文字で返すString.prototype.splitメソッドを用いて、単語ごとにfor文を繰り返し使用して巡回する.
  • 単語を1文字ずつ巡回した後、スペース文字列を1つ追加します.