jpinheiro Posted October 6, 2008 at 03:23 PM Report #215815 Posted October 6, 2008 at 03:23 PM 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. 😕
Tharis Posted October 6, 2008 at 03:45 PM Report #215820 Posted October 6, 2008 at 03:45 PM #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...
jpinheiro Posted October 6, 2008 at 04:34 PM Author Report #215832 Posted October 6, 2008 at 04:34 PM E sem isso do strlen? É que eu sou novato nisto, nem um mês tenho disto :S
pmg Posted October 6, 2008 at 06:16 PM Report #215856 Posted October 6, 2008 at 06:16 PM 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!
Tharis Posted October 6, 2008 at 07:57 PM Report #215895 Posted October 6, 2008 at 07:57 PM 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)...
jpinheiro Posted October 6, 2008 at 10:46 PM Author Report #215951 Posted October 6, 2008 at 10:46 PM 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!
pmg Posted October 7, 2008 at 12:16 AM Report #215967 Posted October 7, 2008 at 12:16 AM #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!
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now