Jump to content
thgsousa312

Funcao para substituir a ultima palavra de uma frase

Recommended Posts

uma função que recebe uma frase e uma palavra antiga e uma palavra nova. A função deve retornar uma string contendo a frase original, mas com a última ocorrência da palavra antiga substituída pela palavra nova. A entrada e saída de dados deve ser feita no programa principal. Exemplo:  

Frase: “Quem parte e reparte fica com a maior parte”

Palavra antiga: “parte”  Palavra nova: “parcela”

Resultado a ser impresso no programa principal: “Quem parte e reparte fica com a maior parcela”

 

function trocarNome(){
        
    var frase = document.getElementById("frase").value;
    var strAntiga = document.getElementById("strAntiga").value;
    var strNova = document.getElementById("strNova").value;

    //frase = frase.split(" ");

    var a = frase.lastIndexOf(strAntiga);
    var fras2 = frase.lastIndexOf(strAntiga).replace(strAntiga,strNova);

    document.getElementById("demo").innerHTML = "Certo";
}

Share this post


Link to post
Share on other sites
On 6/24/2019 at 5:57 PM, thgsousa312 said:

    var a = frase.lastIndexOf(strAntiga);
    var fras2 = frase.lastIndexOf(strAntiga).replace(strAntiga,strNova);

    document.getElementById("demo").innerHTML = "Certo";

O código ficou ótimo, mas deixando uma dúvida, você declarou "var a = frase.lastIndexOf(strAntiga);"
Mas não a usou, nesse caso ela poderia ser retirada? ou se usou, onde usou?

Share this post


Link to post
Share on other sites

O problema do seu código e que você sempre irá buscar a ultima palavra independente se for "parte" ou não, o correto seria buscar pela ultima ocorrência da palavra parte que é o que está sendo pedido no enunciado eu fiz dois exemplos, um usando Regex que é o que eu usaria e outro usando alguns metodos do javascript de manipulação de array.

 

/// Esse exemplo eu fiz poucas alterações apenas busquei a funcionalidade

function trocarNome(){
    var frase = document.getElementById("frase").value;
    var strAntiga = document.getElementById("strAntiga").value;
    var strNova = document.getElementById("strNova").value;
    
    frase = frase.split(" ");
   
    var newSemteced = replaceValueList(frase, strAntiga, strNova);

    document.getElementById("result").innerHTML = newSemteced;
}

function replaceValueList(frase, strAntiga, strNova) {
  var reverseSentece =  frase.reverse();
  var findedIndex = reverseSentece.findIndex(itemArray => itemArray === strAntiga);
  reverseSentece[findedIndex] = strNova;
  var newSentenceReverse = reverseSentece.reverse();
  
  return newSentenceReverse.join(' ');
}

//Agora o código que eu me sentiria melhor em desenvolver

// Alternative solution
function trocarNome2() {
  var frase = getValue("frase");
  var strAntiga = getValue("strAntiga");
  var strNova = getValue("strNova");
  
  var regex = buildRegex(strAntiga);
  var newSentence = replaceLastOccurrence(frase, regex, strNova);
  
  setSentence(newSentence);
}

function buildRegex(strAntiga) {
  return strAntiga+'$';
}

function setSentence(sentence) {
  document.getElementById("result").innerHTML = sentence;
}

function replaceLastOccurrence(frase, regex, strNova) {
  return frase.replace(new RegExp(regex), strNova);
}

function getValue(idElement) {
  return document.getElementById(idElement).value;
}

JSBin: https://jsbin.com/keyotoseyu/edit?html,js,console,output

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By TheRonaldoStar
      Oii, fala ae pessoal!!
      Alguém pode me ajudar com uma coisa por favor?;
      Seguinte!, eu anteriormente fiz uma pergunta aqui no fórum recorrente a isso, mas eu conseguir uma solução parcial.
      Que era, fazer uma listagem de todos os cadastros e fazer a junção dos cadastros com uma coluna igual, Ou seja existem duas colunas [DE e Para], que recebem o id de quem está recebendo ou que está enviando a mensagem, eu conseguir fazer a tal listagem por grupo mas o problema que estou tendo é: que so faz o agrupamento de as colunas contiver o id por ex: [De = "1" e Para ="2"].
      Atualmente estou usando a codificação deste Jeito:
       
      $sql_2 = $db -> prepare("SELECT * FROM privado WHERE (Para = '$Meu_id') Or (De = '$Meu_id') GROUP BY Para, De DESC"); $sql_2 -> execute(); Esta consulta como pode ver ele busca todos os cadastros que tenha o meu ID ou seja do usuário online!, Após a consulta ele vei obter em um "while" somente o [ Id_De eo Id_Para ] desta forma:
      while($dados_2 = $sql_2 -> fetch(PDO::FETCH_OBJ)){ $Id_De = ($dados_2 -> De); $Id_Para = ($dados_2 -> Para); } Mas em fim eu gostaria de saber como mostrar somente um resultado ou seja o ultimo resultado que tiver o meu ID em ambas colunas [ Id_De ou Id_Para ].
      Antes de vocês me recomendar a função DESC LIMIT 'valor' saiba eu quero que liste todos os usuários que enviou ou recebeu minha mensagem não somente 1 ou seja se eu mandar um mensagem para o usuário 2 e ele me retornar uma mensagem vai mostrar somente o ultimo registro que tenha o meu ID e o id dele.
       
      Atenciosamente,
      ~Ronaldo
       
    • By Vinicius Bazan
      Bom dia, Boa tarde e Boa noite!
       
        Estava eu aqui brincando um pouco com JS para entender um pouco melhor essa linguagem, pois eu preciso fazer um relógio em uma pagina HTML e um contador que aumente seu número em +1 de tempos em tempos ( no caso eu estava testando em aumentar a cada 5 segundos, considerando que esse número não vai começar do 0, pois ele teria que pegar todos os segundos que já se passaram nesse dia e dividir por 5, assim seu resultado inteiro seria exibido).
        O relógio com bastante esforço e pesquisa eu consegui fazer e está funcionando, até aqui sem dificuldades, o real problema está no contador, eu fui testar sem colocar um setInterval só para ver se o número aparece na tela e... NADA!
       Então como eu não manjo de JS e tentei fazer a partir do que eu usei pra fazer o relógio eu devo ter errado feio em muita coisa.
       
      <!DOCTYPE html> <html> <head> <title>javascript</title> <meta charset="utf-8"> <script type="text/javascript"> function relogio() { var data = new Date(); var horas = data.getHours(); var minutos = data.getMinutes(); var segundos = data.getSeconds(); if (horas < 10) { horas = "0"+horas; } if (minutos < 10) { segundos = "0"+minutos; } if (segundos < 10) { segundos = "0"+segundos; } document.getElementById("relogio").innerHTML=horas+":"+minutos+":"+segundos; } window.setInterval("relogio()",1000); // Aqui começa a função que eu tentei fazer para o contador function contador() { var data = new Date(); var horas = data.getHours(); var minutos = data.getMinutes(); var segundos = data.getSeconds(); var cont = ((minutos + (horas * 60))*60) + segundos ; document.getElementById("contador").innerHTML= Math.floor(cont/5); } </script> <style type="text/css"> #relogio { font:bold 28pt arial; display: block; margin: 100px auto; padding: 30px; background-color: #FFFF00; width: 150px; border-radius: 6px; box-shadow: 0px 0px 5px rgba(0, 0, 0, .5); } #contador { font:bold 28pt arial; display: block; margin: 100px auto; padding: 30px; background-color: #FFFF00; width: 150px; border-radius: 6px; box-shadow: 0px 0px 5px rgba(0, 0, 0, .5); } </style> </head> <body onload="relogio();"> <div id="relogio"> </div> <hr> <div id="contador"> </div> </body> </html>  
       Se alguém puder me ajudar eu agradeço!
    • By egalauber
      Tenho o seguinte trecho de código:
       
      #anima {
              width:600px;
              height:300px;
              margin:auto;
              
              animation: banner 10s infinite;
          }
       
      @keyframes banner {
              0%, 33% {
                      background:#009;
                  }
              34%, 66% {
                      background:#C00;
                  }
              67%, 100% {
                      background:#390;
                  }
          }
       
      No HTML tenho uma div com id=anima.
      Esse código faz a cada 3 segundos mudar a cor dessa div, tipo como se fosse um slide show.
       
      O que eu preciso fazer, é colocar 3 botões, cada botão mudando pra uma cor. Cada botão mudando pra um pedaço da execução do @keyframes banner.
       
      Botão1 - pula para-> 0%, 33% { background:#009; }
      Botão2 - pula para-> 34%, 66% { background:#C00; }
      Botão3 - pula para-> 67%, 100% { background:#390; }
       
      Como?
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.