Exercício em C [RESOLVIDO]

1. Exercício em C [RESOLVIDO]

Geovani Leite
GeovaniLeite

(usa Outra)

Enviado em 19/06/2017 - 21:00h

Boa noite, pessoal.
Estou com um exercício da faculdade pra fazer e não estou conseguindo.
Trata-se de um algoritmo em C onde o usuário digita o nome completo e o programa deve imprimi-lo como se fosse uma referência.
Exemplo:

Entrada: Armando Luiz Nicolini Delgado
Saída: DELGADO, Armando Luiz Nicolini

Agradeço se alguém puder ajudar


  


2. Re: Exercício em C [RESOLVIDO]

listeiro_037
listeiro_037

(usa Nenhuma)

Enviado em 19/06/2017 - 21:02h

A norma é você começar a escrever alguma coisa do código para poder ser ajudado.

Procure por funções de string em C.

#include <string.h>

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



3. RE: Exercício em C

Geovani Leite
GeovaniLeite

(usa Outra)

Enviado em 19/06/2017 - 21:11h

listeiro_037 escreveu:

A norma é você começar a escrever alguma coisa do código para poder ser ajudado.

Procure por funções de string em C.

#include <string.h>

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden


Opa, obrigado pela dica, sou novo aqui. Vou postar sim o código que estou tentando fazer




4. Re: Exercício em C [RESOLVIDO]

Geovani Leite
GeovaniLeite

(usa Outra)

Enviado em 19/06/2017 - 21:13h

listeiro_037 escreveu:

A norma é você começar a escrever alguma coisa do código para poder ser ajudado.

Procure por funções de string em C.

#include <string.h>

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden


Eu estou tentando assim:

#include<stdio.h>
#include<locale.h>
#include<string.h>

int main(){

setlocale(LC_ALL, "Portuguese");

char nome[100],sobrenome[20];
int i;

printf("Digite um nome: ");
scanf("%[^\n]s",nome);

for(i=strlen(nome);i>0;i--){
if(nome[i]!= ' '){
sobrenome[i]=nome[i];
}else{
break;
}
}


}




5. Re: Exercício em C [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 19/06/2017 - 22:36h

GeovaniLeite escreveu:

Eu estou tentando assim:

#include<stdio.h>
#include<locale.h>
#include<string.h>

int main(){

setlocale(LC_ALL, "Portuguese");

char nome[100],sobrenome[20];
int i;

printf("Digite um nome: ");
scanf("%[^\n]s",nome);


Tire esse “s” após fechar os colchetes, pois ele está sobrando (desse jeito, a função vai procurar pelo caráter “s” na string de entrada). “%[” é uma conversão de seu próprio direito, distinta de “%s”, e seu argumento termina com o sinal “]”.

    for(i=strlen(nome);i>0;i--){
if(nome!= ' '){
sobrenome[i]=nome[i];
}else{
break;
}
}


}


O código começa bem, medindo o tamanho da string, mas logo depois se perde.

O índice [i]i
é válido para os dois arrays ao mesmo tempo (dica: compare os tamanhos dos arrays, e lembre-se de que ele começa grande, e depois diminui)?

Quantas iterações você acha que serão realizadas antes de se executar o comando break?


6. Re: Exercício em C [RESOLVIDO]

listeiro_037
listeiro_037

(usa Nenhuma)

Enviado em 20/06/2017 - 00:39h

A quantidade de caracteres da string final será do tamanho da string inicial mais um por causa da virgula.

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



7. Re: Exercício em C [RESOLVIDO]

Higor da Silva Lopes
ScaldFree

(usa Deepin)

Enviado em 20/06/2017 - 02:11h

Bom cara, estou sem tempo agora...
Porém...
Dê uma olhada nesse código e vê se "abre a mente".

String text = "Testando o código";
String[] s = text.trim().split(" ");
System.out.println("Primeira: "+s[0]);
System.out.println("Ultima: "+s[s.length-1]);


Aqui você pega a primeira e última posição da frase...


8. RE: Exercício em C

Geovani Leite
GeovaniLeite

(usa Outra)

Enviado em 20/06/2017 - 08:16h

Entendi onde estou errando.. Irei tentar resolver e postarei o código aqui.

Obrigado à todos pela ajuda até agora


9. Re: Exercício em C [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 20/06/2017 - 09:19h

Vou dar uma dica.

strlen() mede o tamanho da string. Como strings em C têm seu tamanho indicado por um terminador colocado ao final da string, toda vez que você quiser saber o tamanho da string, você tem de varrê-la novamente, desde o início, até encontrar esse terminador.

Você certamente é capaz de escrever sua própria versão de strlen().

Pareceu-me que, no seu código, você usou strlen() para poder, logo em seguida, varrer a string de trás para o começo, procurando a primeira (de trás para frente) ocorrência de espaço seguido de um não-espaço. Entretanto, você poderia fazer essa varredura do começo para o fim, procurando pelo último espaço (ou, na verdade, pelo início da última palavra após o último espaço) antes do fim da string. Isso eliminaria o uso de strlen(), e reduziria o número de varreduras de dois (uma do início para o fim, com strlen(), e outra do fim para o início, procurando pelo espaço) para um (apenas do início para o fim, procurando pelo terminador, mas marcando o início de cada nova palavra encontrada).


10. RE: Exercício em C

Geovani Leite
GeovaniLeite

(usa Outra)

Enviado em 22/06/2017 - 15:04h

Boa tarde! Desculpem pela demora.
Eu consegui resolver o exercício parcialmente. Ele faz corretamente quando a pessoa possui apenas 2 nomes.
Exemplo:

Entrada: Geovani Leite
Saída: LEITE, Geovani.

Porém, quando a pessoa possui mais de 2 nomes ele mostra apenas o ultimo e o primeiro.
Assim:

Entrada: Geovani Leite Olá
Saída: OLÁ, Geovani.

Segue o código..
#include<stdio.h>
#include<locale.h>
#include<string.h>
#include<ctype.h>
//Aluno: Geovani Leite

int main(){

setlocale(LC_ALL, "Portuguese");

char nome[100],sobrenome[20];
int i,j;

printf("Digite um nome: ");
scanf("%[A-Za-z 0-9]",nome);

i=strlen(nome);
j=0;
while(nome[i] != ' '){
sobrenome[j]=nome[i-1];
i--;
j++;
}
for(i=strlen(sobrenome);i>=0;i--){
sobrenome[i]=toupper(sobrenome[i]);
}

for(i=strlen(sobrenome);i>0;i--){
printf("%c",sobrenome[i-1]);
}
printf(", ");
for(i=0;i<strlen(nome);i++){
if(nome[i] != ' '){
printf("%c",nome[i]);
}else{
break;
}
}
printf(".\n");

return 0;
}








Patrocínio

Site hospedado pelo provedor HostGator.
Linux banner
Linux banner
Linux banner

Artigos

Dicas

Viva o Android

Tópicos

Top 10 do mês

Scripts