Ir ao conteúdo
  • Cadastre-se

Manipulação de strings em C++


Ir à solução Resolvido por Isis Binder,

Posts recomendados

Boa noite pessoal!thumbsup.gif

Sou iniciante em C++, cursando Análise e desenvolvimento de sistemas, e tenho uma dúvida a respeito da manipulação de strings.

Estou construindo um pequeno programa que, recebendo um texto de até 200 caracteres inserido pelo usuário, conte a ocorrência de letras 'x' (a ser especificado).

O código é compilado perfeitamente e o arquivo executável é gerado. Entretanto, após o primeiro uso de cin o programa salta para o fim e encerra (sem acusar qualquer erro). iiam.gif

Podem me ajudar em algo?

Eis o código:

#include <iostream>using namespace std;int main(int argc, char *argv[]){    char texto[1][200];    int opcao;    cout << "Deseja prosseguir? (1/0) ";    cin >> opcao;    do{        if(opcao == 1){            int caracteres, resultado = 0;            char letra;            cout << "Digite o texto no qual a pesquisa devera ser feita (ate 200 caracteres): " << endl;            //cin >> texto[0];            cin.get(texto[0],200);            // efetua a pesquisa no texto inserido            caracteres = cin.gcount();            cout << "Qual letra voce deseja contar? ";            cin >> letra;            for(int cont=0; cont < caracteres; cont++){                string flux;                if(texto[0][cont] == letra){                    resultado++;                }            }            cout << "Pronto. A pesquisa foi feita." << endl;            cout << resultado << " ocorrencias da letra " << letra << "." << endl;            cout << caracteres - resultado << " demais caracteres." << endl;            return 0;        }else if(opcao == 0){            cout << "Encerrando o aplicativo..." << endl;            return 0;        }else{            cout << "Você nao digitou uma opcao valida." << endl;            cout << "Tente novamente." << endl;        }    }while(opcao != 1 || opcao != 0);}

wacko.gif

Link para o comentário
Compartilhar em outros sites

  • Solução

Ao informar 1 ou 0 (primeira pergunta) o \n fica na entrada padrão e é consumido na leitura seguinte.

 

#include <iostream>#include <algorithm>using namespace std;int main(void) {    string texto;    char letra;    int opcao = 1;    int contagem = 0;    while(opcao) {        if(opcao == 1){            cout << "Digite o texto no qual a pesquisa devera ser feita: " << endl;            getline(cin, texto);            cout << "Qual letra voce deseja contar? ";            cin >> letra;            contagem = count(texto.begin(), texto.end(), letra);            if (!contagem) {                cout << "Não foi encontrada nenhuma ocorrência.\n";            } else {                cout << "Ocorrências: " << contagem << endl;            }        }        cout << "Deseja continuar? (1/0): ";        cin >> opcao;        cin.ignore(1, '\n'); // Necessário p/ ignorar o \n preso na entrada.    }    return 0;}
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Muito obrigado pelas dicas!

 

Com base no seu código, utilizando o método cin.ignore(,), reformulei o meu código, e corrigi alguns detalhes:

/* Programa que conta as ocorrências de determinadas letrasdentro de uma string de até 200 caracteres. Após a contagemas informações são exibidas na tela do usuário.Breno Almeida Souza*/#include <iostream>using namespace std;int main(int argc, char *argv[]){    int opcao;    do{        cout << "Deseja prosseguir? (1/0) ";        cin >> opcao;        cin.ignore(1);        if(opcao == 1){            int caracteres, resultado = 0, cont = 0;            char letra='a';            char texto[200];            cout << "Digite o texto no qual a pesquisa devera ser feita (ate 200 caracteres): "<<endl;            cin.getline(texto,200);            caracteres = cin.gcount();            cout << "Qual letra voce deseja contar? ";            cin >> letra;            while(texto[cont]){                if(texto[cont] == letra){                    resultado++;                }                cont++;            }            if(resultado > 0){                cout << resultado << " ocorrencias da letra " << letra << endl;            }else{                cout << "Nenhuma ocorrencia da letra " << letra << endl;            }        }else if(opcao == 0){            cout << "Pressione qualquer tecla para sair." << endl;            cin.get();            return 0;        }else{            cout << "Opcao invalida, parametro recusado." << endl;            cout << "Tente novamente." << endl;            opcao = 1;        }    }while(opcao == 1);    return 0;}

:)  :)  :)  :lol:  :lol:  :D  :D

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!