1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

problema em c++

Discussão em 'Programação' iniciada por xroga69, 4 de Novembro de 2008. (Respostas: 5; Visualizações: 629)

  1. boas,

    eu gosta-va que me ajudagem no problema de visual C++...eu keria fazer um programa em
    C++ em que o utilizador escreva o seu nome por exemplo João Santos Silva Ferreira...e o computador escreve-se para o ecra só o primeiro e o ultimo nest caso João Ferreira..gustava que alguem de desse umas luzes como é que eu divido o nome, o meto no array e mando escrever o primeiro e o ultimo...(eu em termos de arrays nunca os percebi)

    obrigado
     
  2. m00s

    m00s Power Member

    extrais as palavras separadas por espaços.

    a 1ª é fácil, podes copiar os caracteres até ao 1º espaço para uma nova variável,

    para a última há várias soluções mas podes fazer de modo análogo: após encontrar a 1ª palavra continuas a percorrer o array de caracteres / string guardando as palavras depois do espaço.
    se for encontrado um espaço novo então limpa a palavra armazenada e repete o processo
    se for encontrado o fim da string então é essa a última palavra.

    outra solução para a última palavra é ler a string do fim até ao 1º espaço.

    ...estas soluções são para o caso de fazeres isto "à la pata", caso contrário usas a biblioteca string.h onde tens ferramentas disponiveis que simplificam o código.
     
  3. como é que faço para ver se existem espaços?
    e se n existir pa limpar do array?
     
  4. Código:
    int main() {
    char no_compl[50], primeiro[15], ultimo_con[15], ultimo[15];
    int i=0, j=0;
    
    cout << "Introduza o seu nome completo.\n";    
    gets (no_compl);
     
    while (no_compl[i]!=' ')
    {
        primeiro[i] = no_compl[i];
        i++; 
    }
    
    j = strlen (no_compl);
    while (no_compl[j]!=' ')
    {
        j--;
    }
    
    while (no_compl[j]!=' ')
    {
        ultimo[j] = no_compl[j];
        j++;
    }
    
    cout << primeiro;
    cout << ultimo;
    }
    
    eu fiz isto..só que o programa soh escreve o primeiro nome..será que alguem pod ajudar?
     
    Última edição pelo moderador: 4 de Novembro de 2008
  5. The_True_Eue

    The_True_Eue Power Member

    Código:
    ultimo[j] = no_compl[j];
    O problema é aqui. Se o último nome começar, por exemplo, na posição 7 e terminar na 10, o que vais fazer é copiar esses caracteres para as posições 7 a 10 da string ultimo, quando deveria ficar nas posições 0 a 3.
    E a condição desse ciclo deve ser até ao fim da string no_compl, e não até um espaço:
    Código:
    while(no_compl[j])
    Também podes consultar a documentação das funções strchr() e strrchr().
     
    Última edição: 4 de Novembro de 2008
  6. OubeLa

    OubeLa Power Member

    Cuidado a usar isso, isso parece-me exclusivo de Linux. Podes usar a biblioteca sstream.

    Código:
    #include <sstream>
    #include <string>
    
    using namespace std;
    
    string str; //string que vai ser dividida
    string temp;
    istringstream iss(str, istringstream::in);
    
    while (!iss.eof())
    {
         iss >> temp;
                  
        //fazer algo - podes ter um contador, e quando o contador for 1 guarda temp no array, e depois incrementa o contador para não adicionar mais
        temp.clear();
    }
    
    //guadar o conteúdo da variavel temp num elemento do array. É garantido que neste ponto, depois de o ciclo while terminar, o conteúdo da variavel [i]temp[/i] é o último nome
    Podes fazer uma função com isto que recebe uma string (str, tal como está definida a variavel). O que isto faz é dividir a string sempre até encontrar um espaço ou um "\n".

    Por exemplo, João Santos Silva Ferreira, é dividido em

    João
    Santos
    Silva
    Ferreira

    Cada um desdes nomes é guardado na variavel temp de cada vez que aquele ciclo while é corrido. O que tens de fazer agora é apenas guardar o primeiro nome, e o último, num array de 2 elementos. Se precisares de ajuda apita ;)
     
    Última edição: 4 de Novembro de 2008

Partilhar esta Página