Ir ao conteúdo
  • Cadastre-se

Imprimindo ao contrário em C


Maxstockler

Posts recomendados

Olá amigos...

Estou tendo alguns problemas com o desenvolvimento de um programa que imprime o nome de um usuario ao contrario de modo ordenado.

Por ex.: O ususario digita o nome.: Jose Antonio Nogueira.

O programa deve retornar o nome do seguinte modo.: Nogueira Antonio Jose.

Não estou conseguindo fazer com que ele retroceda para o segundo nome.

Parei nesta parte, onde ele imprime apenas o ultimo nome.

#include <stdio.h>

main()

{

char nome[1000];

int tam, i, a;

printf("\nDigite seu nome.: ");

gets(nome);

printf("\n");

tam = strlen(nome);

i = tam - 1;

do

{

i--;

a=i;

}while (nome != ' '); // ultimo nome

for (i=i+1;i<tam;i++)

printf("%c",nome);

i = a - 1;

do

{

i--;

a=i;

}while (nome != ' '); // penultimo sobrenome.

for (i=i=1;i<a;i++)

printf("%c",nome);

system("PAUSE>nul");

}

Mas a parte do penultimo sobrenome não está funcionando.

Conto com a ajuda de vocês...

Obrigado.

Link para o comentário
Compartilhar em outros sites

Olá... Terminei o programa do seguinte modo.:

{

char nome[1000];

int i, tam, x, a;

printf("\n Digite seu nome.: ");

gets(nome);

printf("\n");

tam = strlen(nome);

i = tam - 1;

do

{

i--;

x=i;

}while(nome!=' ');

for(i=i+1;i<tam;i++)

printf("%c",nome);

do

{

i = x - 1;

do

{

i--;

a = i;

}while(nome!=' ');

for(i=i+1;i<x;i++)

printf("%c",nome);

x = a;

printf(" ");

}while(nome<a);

system("PAUSE<null");

}

Ele imprimi os nomes ao contrario de modo ordenado mas não imprime a primeira letra do primeiro nome... E também notei que após a execução ele não mantem a tela de exibição aberta, não permitindo que se visualize a resultados do programa...

O que pode gerar este tipo de problema....?

Link para o comentário
Compartilhar em outros sites

Olá... Terminei o programa do seguinte

E também notei que após a execução ele não mantem a tela de exibição aberta, não permitindo que se visualize a resultados do programa...

O que pode gerar este tipo de problema....?

Você passou um comando errado no system()

O correto é system("PAUSE"); e não system("PAUSE<null");

Se for usar o getche() que o megghaz citou, lembre-se de incluir a lib conio.h embora eu ache desperdício incluir esta lib apenas para usar uma funcionalidade já existente na stdlib.h (o system() )

Quanto ao código, você deixou ele bem maluco agora...

refaz ele, começando pela condição do último do-while

}while(nome<a)

você tá comparando um caractere da string com um inteiro que você estava usando como marcador da posição do caractere " " (espaço) ???

Outra dica é não fazer estas subtrações:

i = tam - 1;

i = x - 1;

antes dos do-while. Ponha apenas i = tam; e i = x;

você já decrementa o i dentro do laço, se você decrementá-lo duas vezes, como faz, um possível nome de apenas um caractere irá passar despercebido.

Outra coisa é colocar uma condição de saída do do-while para o caso caso de o i ficar menor que ZERO (o que causaria um erro quando fosse acessar um array usando este valor).

Link para o comentário
Compartilhar em outros sites

este programa é em pascal (e foi feito por um amigo meu, para ser postado em outro topico aqui.), mas pode dar uma ideia... depois é sop imprimir (coloque um identificador de "tecla espaço", cada vez que o leitoir da string, encontrar um, entenderá que se trata de uma palavra nova, e poderá armazena-la em uma nova stringa, dai imprima-as em on=rdem inversa...) este algoritimo não faz o que você quer, apenas inverte letra a letra.

program invert;
uses crt;
var
texto: string;
cont: integer;
begin
clrscr;
writeln('<<==MESTRE ANDREI FELIPE 2008 - CODE TOSCUS==>>');
write('Digite uma frase: ');
readln(texto);
writeln;
for cont:= length(texto) downto 1 do
begin
write(copy(texto,cont,1));
end;
writeln(' Tecle algo para sair...');
readkey;
end.

Link para o comentário
Compartilhar em outros sites

Pra falar a verdade, este tipo de coisa normalmente é usado em cadastros, dai tem o campo para nome e outro para sobrenome, dai é fácil, é só imprimi-los de forma inversa, mas se não tiver estes campos, dai acho que só através da identificação do caracter de espaço.

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

Arquivado

Este tópico foi arquivado e está fechado para 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!