Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Obtenção de uma sigla


jhonantan_soad

Pergunta

ola pessoal,

Eu sou iniciante em C, e estava treinando fazendo um exercicio aqui,

q pede para receber o nome de uma pessoa e retorne a sigla desse nome, mais não sei o porque o programa mostra o nome da pessoa todo denovo acho q deve ter alguma coisa errada com o if mais não conssegui descobrir.

alguém pode me ajudar por favor.

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

int main()
{
    char nome[50],sigla[10];
    int x,y;
    printf("Digite o nome:\n");
    fgets(nome,49,stdin);
    strcpy(sigla,nome);
    for(x=0;nome[x]!='';x++)
    {
        if (nome[x]==' ')
        {
            sigla[x]=nome[x+1];
            x++;
            }
    }
     
     
    printf("\nA abreviatura é:\n");
    for (x=0;x<=strlen(sigla);x++)
    {
        printf("%c.",sigla[x]);
        }
    system("pause");
    return(0);
}

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Primeira coisa: Ao invés de terminar o loop quando o valor da matriz for '', deve-se utilizar o 0 para o fim da string. Muitos compiladores não aceitam isso. Agora observe essa linha:

strcpy(sigla,nome);
Você simplesmente copiou toda a string nome para sigla. Remova essa linha do código. Agora vamos a outro erro: Quando o caractere da string nome foi 32 (espaço, ou ' '), você copiou o próximo caractere para o elemento de sigla que na mesma posição do espaço, enquanto deveria utilizar um contador independente para fazer isso. Na verdade você já tinha declarado a variável y que deveria ser utilizada para isso, mas não a estava utilizando. Com as correções acima o código deverá ficar assim:
int x,y=0;
    printf("Digite o nome:\n");
    fgets(nome,49,stdin);
    for(x=0;nome[x]!=0;x++)
    {
        if (nome[x]==' ')
        {
            sigla[y]=nome[x+1];
            y++;
        }
    }
Mas você dever notar que a primeira inicial do nome não foi registrada. Isso ocorre porque você escreveu as siglas após um sinal de espaço (' '). A menos que a pessoa digite um espaço antes do primeiro nome, isso não inclui o mesmo como uma sigla. Você pode, ao invés de somente verificar se o caractere é um espaço, fazer uma comparação e verificar se é o primeiro caractere. O código dentro do for pode ficar assim:
if (nome[x]==' ')
        {
            sigla[y]=nome[x+1];
            y++;
        }else if(!x){
            sigla[y]=nome[x];
            y++;
        }

Há maneiras de tornar o código mais limpo e eficiente. A melhor forma de se criar um código como esse seria com ponteiros para percorrer os caracteres, mas não o fiz assim porque não sei se já estudou.

Link para o comentário
Compartilhar em outros sites

  • 0

ow testei aki,

vei vlw mesmo muito obrigado funcionou certinho, ainda bem q você não usou ponteiros porque eu não aprendi ainda :P

mas aqui não querendo abusar, mas é que o programa ta mostrando tambem os "de,das, dos", entendeu?

tipo que o cara digita "jose dos santos" era para mostrar JS, mas ta mostrando JDS.

Eu juro que tentei, colocar uma condição para poder barrar isso mas não conssegui,

ainda estou apanhando com esse negoço de string.

seria tipo assim a condição???

if((nome[x+1]==32) || (nome[x+2]==32) || (nome[x+3]==' ')) 
break;

e depois um else com todo o resto dentro??

fiz desse geito mas não deu muito certo. :P

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...