1
votes

Inversez le mot dans une chaîne avec le même ordre en javascript sans utiliser les fonctions de tableau sauf .length

Je veux inverser la chaîne dans le même ordre. Nous ne devons pas utiliser les fonctions Array comme split (), .reverse () et .join () . mais nous pouvons utiliser array.length .

Ici, je suis attaché à mon code. Comment y parvenir plus efficacement.

var str = "i am javascript";
// result "i ma tpircsavaj"
function reverseString(myStr){
    var strlen = myStr.length, result = "", reverseStr = "", reverseStrArr = [];
  for(var i = strlen-1; i >= 0; i--){
    reverseStr +=  myStr[i];
  }

    for(var j = 0; j < strlen; j++){
    if(reverseStr[j] == " "){
      reverseStrArr.push(result);
      result = "";
    }else{
      result += reverseStr[j];
      if(j + 1 == strlen){
        reverseStrArr.push(result);
        result = "";
      }
    }
  }

  for(var k=reverseStrArr.length - 1; k >= 0; k--){
    result += reverseStrArr[k] + " "
  }
  console.log(result);
}
reverseString(str);


5 commentaires

push () est une fonction de tableau, n'est-ce pas? :)


@PatrickRoberts. désolé, nous pouvons utiliser push (). ne permet pas d'utiliser la division, l'inversion et la jointure.


Je pense que la première boucle for est suffisante -> for (var i = strlen - 1; i> = 0; i--) {reverseStr + = str [i]; } return reverseStr;


@HasanSh. la première boucle for donnera "tpircsavaj ma i". pas le résultat attendu. jsfiddle.net/Lqk2rs79


Vous ne pouvez donc pas utiliser les fonctions de tableau ... mais vous pouvez utiliser str.match (/ \ S + / g) , ce qui vous donnerait un tableau de mots (chaînes de caractères non-espace), vous pouvez inverser chaque mot et concaténer les chaînes ensemble.


4 Réponses :


1
votes

function reverseStr(str) {
  var ret = "";
  for (var i = 0; i < str.length; i++) {
    ret = str[i] + ret;
  }
  return ret;
}

function doIt(str) {
  var ret = "", cur = "";
  for (var i = 0; i < str.length; i++) {
    var c = str.charAt(i);
    if (c == ' ' || c == '.') {
      ret += reverseStr(cur) + c;
      cur = "";      
    } else {
      cur += c;
    }
  }
  ret += reverseStr(cur);  
  return ret;
}

console.log(doIt('Reverse the word in a string with the same order in javascript without using the array functions except .length'));


0 commentaires

1
votes

Vous pouvez faire une boucle, collecter les caractères d'un mot et inverser le mot.

function reverse(string) {
    var reversed = '';
    while (reversed.length !== string.length) {
        reversed = string[reversed.length] + reversed;
    }
    return reversed;
}

var string = "i am javascript",
    temp = '',
    result = '',
    i = string.length;

while (i--) {
    if (string[i] === ' ') {
        result = ' ' + reverse(temp) + result;
        temp = '';
    } else {
        temp = string[i] + temp;
    }
}
if (temp) result = reverse(temp) + result;

console.log(result);

Une approche de la fin.

function reverse(string) {
    var reversed = '';
    while (reversed.length !== string.length) {
        reversed = string[reversed.length] + reversed;
    }
    return reversed;
}

var string = "i am javascript",
    temp = '',
    result = '',
    i = 0;

while (i < string.length) {
    if (string[i] === ' ') {
        result += (result && ' ') + reverse(temp);
        temp = '';
    } else {
        temp += string[i];
    }
    i++;
}
if (temp) result += (result && ' ') + reverse(temp);

console.log(result);


0 commentaires

0
votes

function reverse(word) {
  if (word.length > 1) {
    var newWord = '';
    for (j = word.length-1; j >= 0; j--) {
      newWord += word[j];
    }
    return newWord + ' ';
  } else {
    return word + ' ';
  }
}

var text = "i am javascript";
var words = text.split(' ');
var result = '';
for (i = 0; i < words.length; i++) {
  result += reverse(words[i]);
}

console.log(result);


0 commentaires

2
votes

Utilisez 2 pointeurs: i pour indiquer la position actuelle et j pour indiquer l'index de début du mot actuel. Ajoutez l'inverse du mot courant char par char quand espace.

Ne vous laissez pas berner par les boucles imbriquées, la complexité est la même que la vôtre: O (n) et en quelque sorte plus propre pour moi.

var string = "i love javascript and the whole world!"
var result = ""
var i = j = 0
var l = string.length

while (i++ < l) {
	var k = i
	if (string[i] === " " || (i === l - 1) && k++) {
		while (--k >= j) result += string[k]
		j = i + 1
		result += " "
	}
}
result = result && result.slice(0, -1) || ""


console.log(result)


0 commentaires