Ir ao conteúdo
  • Cadastre-se
Lheandro Ferreira

RESOLVIDO Abreviar Nome

Recommended Posts

Galera não sei o que tem de erro o meu código. Ao final ele deverir aberviar um nome como citação bibliografica. Ex: 

Machado de Assim seria:

Assis, M.

 

#include <stdio.h>#include <stdlib.h>int main(){    char nome[100];    printf("Digite o seu nome:\n");    fflush(stdin);    fgets(nome,100,stdin);    abrevia(nome);    return 0;}void abrevia(char *nome){    int i,j,n;    int cont=0,m=0;    printf("\n\n Seu nome abreviado é:\n");    n=strlen(nome);    while (nome[n] != ' ')    {        cont++;        n--;    }    for (i=(n-cont);i<n;i++)    {        printf("%c", nome[i]);    }    printf(", ");    n=n-cont;    cont=0;    j=0;    do    {        for(i=j; i<n; i++)        {            if(nome[i] != ' ')            {                cont++;            }            else                break;        }        if(cont>2)        {            printf("%c. ", nome[j]);        }        j=i+1;    }while(1<n);    printf("\n");}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nome  = "Club Hardware" tem 13 caracteres

Sendo que "Club" tem 4 e "Hardware" tem 9

Assim i sera igual a: 9 - 5 = 4.

 

Começou a imprimir a partir de "Club Hardware"[ 4 ] o resultador é:

"Hardware".

Depois disso basta imprimir ", " e a Primeiro letra do nome;

 

e o resultador sera: "Hardware, C"

 

O que está saindo no final do seu programa?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nome  = "Club Hardware" tem 13 caracteres

Sendo que "Club" tem 4 e "Hardware" tem 9

Assim i sera igual a: 9 - 5 = 4.

 

Começou a imprimir a partir de "Club Hardware"[ 4 ] o resultador é:

"Hardware".

Depois disso basta imprimir ", " e a Primeiro letra do nome;

 

e o resultador sera: "Hardware, C"

 

O que está saindo no final do seu programa?

Então ele imprime o "Clube, C"... 

não sei porque...

Compartilhar este post


Link para o post
Compartilhar em outros sites

edit

Você pode simplificar, fazendo um loop 'reverso' no nome para identificar o espaço e atribuir a posição ao um ponteiro.

    char nome[100], *s;    int i;    printf("Digite o seu nome: ");        scanf("%99[^\n]", nome);    i = strlen(nome);    while(i--)        if(nome[i] == ' '){            s = &nome[i];            break;        }      printf("Nome Abreviado: %s, %c\n", s, nome[0]);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Troque: i=(n-cont);i<n;i++

Por: i = n +1; i < n + cont; i++

Outra coisa fgets costuma gravar '\n' no final do in-put então trate isso antes de chamar a função abreviar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×