用下一个字母替换字符串中的字母,并在更改的字符串中大写元音

时间:2013-06-30 07:23:28

标签: javascript

function LetterChanges(str) {
    var alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    for (var i = 0; i < str.length; i++) {
        var index = alphabet.indexOf(str[i])
        if (/[a-zA-Z]/.test(str[i])) {
            str = str.replace(str[i], alphabet.charAt(index + 1));
        }
        if (/[aeiou]/.test(str[i])) {
            str = str.replace(str[i], alphabet.charAt(index + 26));
        }
    }
    return str;
}

当我致电LetterChanges("hello")时,它会返回'Ifmmp'这是正确的,但是当"sent"通过时,它会返回'ufOt'而不是'tfOu'。那是为什么?

6 个答案:

答案 0 :(得分:1)

str.replace()用替换替换字符串中匹配的第一个匹配项。 LetterChanges("sent")执行以下操作:

  • i = 0:str.replace("s", "t"),现在str =“帐篷”
  • i = 1:str.replace("e", "f"),现在str =“tfnt”
  • i = 2:str.replace("n", "o"),现在str =“tfot”,然后         str.replace("o", "O"),现在str =“tfOt”
  • i = 3:str.replace("t", "u"),现在str =“ufOt”
  • return str

答案 1 :(得分:0)

有几个问题。主要的一点是你可能会无意中多次改变同一个字母。

让我们看看s中的sent会发生什么。您首先将其更改为t。但是,当更改最后一个字母(也是t)时,您会再次更改第一个字母 ,这次是从t更改为u。< / p>

另一个较小的问题是处理字母z

最后,您在第二个if中的索引关闭了一个:d变为D而不是E

答案 2 :(得分:0)

您可以使用String.replace来避免:

function LetterChanges(str) {
    return str.replace(/[a-zA-Z]/g, function(c){
        return String.fromCharCode(c.charCodeAt(0)+1);
    }).replace(/[aeiou]/g, function(c){
        return c.toUpperCase();
    });
}

但仍有一个错误:LetterChanges('Zebra')将返回'[fcsb'。我认为这不是你的意图。你将不得不处理这一转变。

答案 3 :(得分:0)

试试这个:

function LetterChanges(str) {
    var alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
   var result = '';
  var temp;
    for (var i = 0; i < str.length; i++) {

        var index = alphabet.indexOf(str[i])

        if (/[a-zA-Z]/.test(str[i])) {
            //str = str.replace(str[i], alphabet.charAt(index + 1));
          temp= alphabet.charAt(index + 1);
          index = index+1;
        }
      else if(str[i] == ' '){
      temp = ' ';
      }
        if (/[aeiou]/.test(temp)) {
            temp = alphabet.charAt(index + 26);
        }

      result += temp;
    }
    return result;
}

答案 4 :(得分:0)

var str = 'bcd12';

str = str.replace(/[a-z]/gi, function(char) { //call replace method
  char = String.fromCharCode(char.charCodeAt(0)+1);//increment ascii code of char variable by 1 .FromCharCode() method will convert Unicode values into character 
  if (char=='{' || char=='[') char = 'a'; //if char values goes to "[" or"{" on incrementing by one as "[ ascii value is 91 just after Z" and "{ ascii value is 123 just after "z" so assign "a" to char variable..  
  if (/[aeiuo]/.test(char)) char = char.toUpperCase();//convert vowels to uppercase
  return char;
});

console.log(str);

答案 5 :(得分:0)

检查此代码示例。它没有错误。不是很直接,但工作就像一个魅力。干杯!

function LetterChanges(str) { 
  var temp = str;
  var tempArr = temp.split("");//Split the input to convert it to an Array
  tempArr.forEach(changeLetter);/*Not many use this but this is the referred way of using loops in javascript*/
  str = tempArr.join("");

  // code goes here  
  return str; 

}

function changeLetter(ele,index,arr) {
  var lowerLetters ="abcdefghijklmnopqrstuvwxyza";
  var upperLetters ="ABCDEFGHIJKLMNOPQRSTUVWXYZA";
  var lowLetterArr = lowerLetters.split("");
  var upLetterArr = upperLetters.split("");
  var i =0; 

  for(i;i<lowLetterArr.length;i++){
    if(arr[index] === lowLetterArr[i]){
      arr[index] = lowLetterArr[i+1];
      arr[index]=arr[index].replace(/[aeiou]/g,arr[index].toUpperCase());
      return false;
    }
    if(arr[index] === upLetterArr[i]){
      arr[index] = upLetterArr[i+1];
      arr[index]=arr[index].replace(/[aeiou]/g,arr[index].toUpperCase());
      return false;
    }
  }

}

// keep this function call here 
// to see how to enter arguments in JavaScript scroll down
LetterChanges(readline());