problema em c++

xroga69

Membro
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
 
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.
 
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:
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:
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:
Back
Topo