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'
。那是为什么?
答案 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());