Ir ao conteúdo

Abreviar Nome


Ir à solução Resolvido por Midori,

Posts recomendados

Postado

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");}
Postado

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?

Postado

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

  • Solução
Postado

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]);
Postado

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.

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!