Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Jardel Nunes

C++ comando: while (cin>>...)

Recommended Posts

Olá pessoal. Estou iniciando em C++ pelo livro "princípios e práticas de programação com C++". Me deparei com o seguinte código durante a minha leitura:

 

#include <iostream>

 

#include <string>

#include <vector>

#include <algorithm>

#include <cmath>

#include <locale.h>

 

using namespace std;

inline void keep_window_open() {char ch; cin>>ch;}

 

int main (){

 

 

setlocale(LC_ALL, "Portuguese");

 

string anterior= " ";

string atual;

while (cin>>atual){

if(anterior == atual)

cout << "palavra repetida: " << atual << '\n';

 

anterior = atual;

}

 

 

}

 

Ao eu escrever uma frase como "O gato gato pulou pulou muito" o programa emite como saída, depois e eu clicar 'enter', o seguinte:

palavra repetida: gato

palavra repetida: pulou

 

Não estou entendendo por que ocorre dessa maneira: primeiro escrevo a frase completa, depois clico enter, e depois mostra quais são as palavras repetidas. Onde é armazenado o conjunto das palavras repetidas? E ''while (cin>>atual)'', o que isso significa? Porque não ocorre dessa maneira: ao repetir uma palavra, já mostra qual a palavra repetida? Porque e como isso ocorre apenas no final (após eu clicar 'enter')?

 

OBS: estou usando o dev-C++ 5.11

 

Desde já agradeço

Compartilhar este post


Link para o post
Compartilhar em outros sites

o <string> funciona igual o (char *), quando você salva as palavras dentro da string, ele cria um "array" e salva cada caractere em um index diferente.

string atual = "O gato gato pulou pulou muito";
/*
atual[0] = 'O';
atual[1] = ' ';
atual[2] = 'g';
...
*/

Apenas quando você aperta 'enter', que o programa vai inserir o que você digitou dentro da string, e a partir daí que o while vai fazer a comparação checando cada palavra (o que é separado pelo espaço) e verificar se a palavra atual é igual a anterior.

 

Como você inicializou 'anterior' como espaço, ele verifica se 'O' é igual a espaço, como não, ele seta 'O' como anterior e volta pro while indo para a próxima palavra, comparando se 'gato' é igual à 'O', e assim por diante.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.