Jump to content
Sign in to follow this  
jpinheiro

Inverter nome

Recommended Posts

jpinheiro

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:

Share this post


Link to post
Share on other sites
Tharis

#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...

Share this post


Link to post
Share on other sites
pmg

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!).


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
Tharis

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)...

Share this post


Link to post
Share on other sites
jpinheiro

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!

Share this post


Link to post
Share on other sites
pmg

#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.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.