• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

jpinheiro

Inverter nome

7 mensagens neste tópico

Olá,

A minha dúvida é a seguinte, quero inverter um nome que está num array, mas quero a mesma ordem dos nomes, exemplificando:

O utilizador escreve:

jo co pi

E do PC sai:

oj oc ip

Isto é, nome invertido, mas a ordem das palavras continua.

:confused:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

#include <string.h>

void invert(char *s) {
     int i,len=strlen(s);
     char c;
     
     /* Vais ate' meio da string
     e a cada iteraccao, trocas o
     caracter da posicao onde vais pelo
     correspondente a contar do final */
     
     for (i=0;i<len/2;i++) {
         c=s[i];
         s[i]=s[len-1-i];
         s[len-1-i]=c;
     }
     
     /* string = abc
     (i=0) c = 'a'
           string[0]=string[3-1-0] ('c')
           string[3-1-0]=c ('a')
     (i=1) c = 'b'
           string[1]=string[3-1-1] ('b')
           string[3-1-1]=c ('b')
     */
     
}

Deixo aqui o código da função de inversão, comentários e exemplos....

Para o que queres, corres a array com os nomes e aplicas a função a cada nome... e depois fazes o output...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E sem isso do strlen?

É que eu sou novato nisto, nem um mês tenho disto :S

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não és aluno da simone, pois não ? LOL

Mete aqui o que já fizeste e descreve os problemas que tens em prosseguir.

De certeza que alguém te ajuda (mesmo que sejas aluno da simone!).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não és aluno da simone, pois não ? LOL

Mete aqui o que já fizeste e descreve os problemas que tens em prosseguir.

De certeza que alguém te ajuda (mesmo que sejas aluno da simone!).

:confused:

E sem isso do strlen?

É que eu sou novato nisto, nem um mês tenho disto :S

Sem isso do strlen, penso que te referes a nao ter que incluir a string.h... Podes sempre fazer antes um for até encontrar '\0' (end of string)...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigada a todos.

Não, não sou aluno da Simone. =D

Tharis, obrigada pela ajuda, mais isso é já bastante "evoluido" para um aluno de apenas um mês disto. ^^

Aqui está o que eu com a ajuda de um colega consegui fazer, ainda está com alguns erros, mas era isto que se pedia:

#include <stdio.h>

void main()
{

char nome[50],nomeinv[50];    // array para nao invertido e outra para o invertido
int i=0,j=0,h=0,esp=0,maior=0;

printf("Introduza o seu nome!\n");
gets(nome);

while (nome[i]!='\0')
{
maior = i;
i++;
}

i=0;

while (nome[i]!='\0')         // repete ate acabar
{
if (nome[i] == ' ' || i == maior)        // se houver um espaço
	{
	h = i;				  // h toma o valor de i. assim o valor de i fica intocável
	while (h>=esp)        // repete ate que o h
		{
		nomeinv[j] = nome[h];  // copia os valores, nome esta a andar para traz o nomeinv para a frente
		h--;			  // desce um no vector nome
		j++;			  // aumenta um no vector nomeinv
		}
	esp = i;			  // guarda a posição do ultimo espaço para depois so percorrer o vector nome enquanto h>=esp
	}
i++;						  // incrementa um i no vector nome

}





i = 0;						  // ja nao preciso do i em cima, portanto posso aproveita-lo para o output
while (nomeinv[i]!='\0')
{
printf("%c",nomeinv[i]);
i++;
}
printf("\n");
}

Cumpz!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

#include <stdio.h>

void main()
{

char nome[50],nomeinv[50];    // array para nao invertido e outra para o invertido
int i=0;

/* ... */

while (nome != '\0')
{
  maior = i;
  i++;
}

/* ... */

O ciclo while que escreveste não vai funcionar (e os outros ciclos mais abaixo no código também não).

A variável nome é um array de char's e NUNCA, nunca é igual a '\0'.

O teu ciclo é um ciclo infinito.

Possivelmente querias dizer isto

while (nome[i] != '\0')

Neste caso, da primeira vez pelo ciclo, como i foi inicializado a 0, o programa compara o primeiro char de nome com '\0' ... e depois o segundo char (nome[1]) ... etc...

Altera os teus ciclos while() e volta aqui com mais problemas :confused:

PS. Tem atenção à indentação do código.

Quanto mais estruturares o código de nascença, mais fácil é alterá-lo depois e mais fácil é entende-lo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora