Ir ao conteúdo

C imprimir primeiro e ultimo nome


Ir à solução Resolvido por devair1010,

Posts recomendados

Postado

preciso de uma ajuda, tenho um trabalho de faculdade para resolver que pede o seguinte = imprimir apenas o primeiro e o ultimo nome da pessoa em C, sei que tenho que contar de trás para frente e vice e versa, mas estou com duvida de como identificar o espaço, alguém poderia me auxiliar? entrada - joao antonio tavares ---> saida - joao tavares

int main ()
{
    int x,tam;
    char nome [100];
    printf ("digite um nome\n");
    gets(nome);
    tam=strlen (nome);
    for (x=0; x=null;x++)
    {
        printf("%c ",nome [x]);
    }
    for (x=tam-1; x>=0; x--)
    {
        printf(" %c ",nome [x]);
    }
    printf("\n\n");
    system ("pause");
    return 0;
}

  • Amei 1
  • Moderador
Postado

Caro usuário,

 

Seja bem-vindo ao Clube do Hardware.

 

No intuito de servir como fonte de pesquisa no caso de instituições de ensino, informamos que incorrer no resolvimento por completo de questões relacionadas a disciplinas escolares de cursos técnicos e faculdades podem ser revistas e removidas pela Equipe de Moderação do Clube do Hardware.

 

Para sanar dúvidas sobre esse tipo de problema, por gentileza, publique o passo a passo do desenvolvimento da questão, projeto, monografia ou conteúdo em dúvida para que possamos analisar se a resposta está correta ou não, ou para que possa ser auxiliado com a dúvida no desenvolvimento do exercício.

 

Infelizmente, não há como resolver os trabalhos pelos usuários. O objetivo do Clube do Hardware é auxiliar seus usuários a encontrar soluções para que possam sanar suas dúvidas, e não de trazer soluções prontas para seus usuários. Além disso, copiar e colar respostas que não são de autoria própria do qualquer usuário é considerado plágio, o que é ilegal.

 

Esperamos que compreenda.

 

Atenciosamente,

Equipe Clube do Hardware

  • Curtir 2
  • Solução
Postado

@Ganeco     seu código não está compilando , e esse null , que você colocou no Loop for não funciona dessa forma  , geralmente se usa ele com ponteiros ,  e o resultado final não faz o que se pretende , pois apenas escreve o nome e os sobrenomes ao contrário , então creio que o que você precisa fazer é mover os caracteres da última palavra da string para as posições começando do primeiro caractere depois do primeiro espaço da string , e assim que terminar essa movimentação dos caracteres coloque o finalizador de string  '\0' , e assim escreve a string modificada .

 aqui como a linguagem  c , armazena os caracteres de huma string :

1549844176_outrastring.thumb.JPG.336a6c9026c5bc7ff443be41072b7ddc.JPG

 então creio que seu código poderia ser assim  :

#include <stdio.h>
#include <iomanip>
int main()
{
    int x,y,tam;
    char nome [100];
    printf ("digite um nome\n");
    fgets(nome,99,stdin);        //  reserva um espaço no vetor de char
                                 //  para armazenar o caractere nulo '\0'
                                 //  finalizador de string's
    tam = strlen (nome);
    tam--;
    x = tam;
    y = 1;
    while(nome[x-1] != ' ')x--;  //  aponta para o primeiro caractere do último nome
    while(nome[y-1] != ' ')y++;  //  aponta para o primeiro caractere depois do primeiro espaço da string
    for(; x<tam; x++ )           //  apenas os últimos caracteres da string
    {
        nome[y] = nome[x];       //  puxa os caracteres do último nome da string
                                 //  e coloca depois do primeiro espaço da string
        y++;                     //  incrementa a posição na string , onde colocar o prox caract
    }
    nome[y] = '\0';              //  marca o final da nova string
    printf("\nO nome e sobreNome => %s\n\n",nome);
    system ("pause");
    return 512;
}

 

  • Curtir 1
  • Amei 1
Postado

muito obrigado @devair1010, eu não sabia como declarar o espaço vazio, muito obrigado pela sua ajuda, espero um dia poder retribuir a mesma altura para outros colegas, abraço

  • Curtir 1
Postado

Outra forma seria usando o loop para procura o espaço e quando encontrar substituir pelo terminador e atribuir o endereço da próxima posição para pegar o último nome,

 

#include <stdio.h>

int main() {
    char nome[100];
    char *p = nome;
    char *ultimo;
    
    printf("Digite um nome: ");
    fgets(nome,100,stdin);
    
    while(*p){
        if(*p == ' '){
            ultimo = p + 1;
            *p = 0;
        }
        p++;
    }
    printf("%s %s",nome, ultimo);
    return 0;
}

 

  • Curtir 1
  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 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!