Jump to content

Recommended Posts

Posted

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.

😕

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

Posted

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!

Posted

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

😕

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

Posted

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!

Posted
#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 😕

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!

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • 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.