Ir ao conteúdo
  • Cadastre-se

Copiar uma string de trás para a frente em outra string


lunalovegood
Ir à solução Resolvido por ScreenBlack,

Posts recomendados

Boa tarde, inventei de fazer um programa simples aqui, é digitada uma palavra qualquer de 3 letras (string a), depois a copio de trás para frente numa outra string (string b ) tentei fazer isso usando o comando for, mas não deu certo, então fui atribuindo os caracteres em b manualmente, item por item já que a palavra é curta, mas tem algo errado pois no último print não aparece caractere algum na string b, é como se ela estivesse vazia. O que pode estar errado?

Agradeço desde já a quem puder ajudar.

#include<stdio.h>#include<string.h>int main(){    char a[3], b[3];    int i, j, n; //n = numero total de caracteres da string a        //limpar a string a e b    for (i=0; i<3; i++)    {        b[i]=' ';        a[i]=' ';    }        fflush(stdin);        printf ("Digite uma palavra de 3 letras: ");     scanf("%s", &a);            b[0] == a[2];    b[1] == a[1];    b[2] == a[0];                printf ("\n\nPalavra digitada: %s \n", a);    printf ("A palavra digitada anteriormente copiada de tras para frente em b: %s \n\n", ;        system("pause");    return 0;}    
Link para o comentário
Compartilhar em outros sites

  • Solução

Vamos lá...

Existem alguns errinhos de linguagem específicos do C.

 

1) Quando se trabalha com string, necessitamos de um terminador de string (definido como '\0'). Ele é um caracter no final da string.

Dessa forma, se quisermos uma string com 3 caracteres, precisamos declarar o vetor com 4 posições.

char vetor[4];vetor[0] = 'a';vetor[1] = 'b';vetor[2] = 'c';vetor[3] = '\0'; printf("vetor: %s", vetor);

2) Para declarar uma string como "limpa", deve-se colocar o terminador de string em todas as posições. Existem duas maneiras simples de fazer isso.

- Usando a forma como você fez, porém trocando o espaço pelo terminador (espaço é um caracter legível, por isso que não considera como limpeza)

- Usando a limpeza de maneira direta:

char vetor[10] = {'\0'}; // Inicia limpo o vetor

3) Você está utilizando o sinal de comparação (igualdade) quando vai atribuir o valor do vetor a em b. O sinal de atribuição é apenas um igual ("=").

 

 

Corrigi seu código para você comparar:

int main(void){    char a[4] = {'\0'};    char b[4] = {'\0'};    int i = 0;    int j = 0;    int n = 0;     printf ("Digite uma palavra de 3 letras: ");    scanf("%s", a);     for ( i = 2; i >= 0; i-- )        b[i] = a[2-i];     printf ("\n\nPalavra digitada: %s \n", a);    printf ("A palavra digitada anteriormente copiada de tras para frente em b: %s \n\n", ;     system("pause");     return 0;}
Link para o comentário
Compartilhar em outros sites

 

Vamos lá...

Existem alguns errinhos de linguagem específicos do C.

 

1) Quando se trabalha com string, necessitamos de um terminador de string (definido como '\0'). Ele é um caracter no final da string.

Dessa forma, se quisermos uma string com 3 caracteres, precisamos declarar o vetor com 4 posições.

char vetor[4];vetor[0] = 'a';vetor[1] = 'b';vetor[2] = 'c';vetor[3] = '\0'; printf("vetor: %s", vetor);

2) Para declarar uma string como "limpa", deve-se colocar o terminador de string em todas as posições. Existem duas maneiras simples de fazer isso.

- Usando a forma como você fez, porém trocando o espaço pelo terminador (espaço é um caracter legível, por isso que não considera como limpeza)

- Usando a limpeza de maneira direta:

char vetor[10] = {'\0'}; // Inicia limpo o vetor

3) Você está utilizando o sinal de comparação (igualdade) quando vai atribuir o valor do vetor a em b. O sinal de atribuição é apenas um igual ("=").

 

 

Corrigi seu código para você comparar:

int main(void){    char a[4] = {'\0'};    char b[4] = {'\0'};    int i = 0;    int j = 0;    int n = 0;     printf ("Digite uma palavra de 3 letras: ");    scanf("%s", a);     for ( i = 2; i >= 0; i-- )        b[i] = a[2-i];     printf ("\n\nPalavra digitada: %s \n", a);    printf ("A palavra digitada anteriormente copiada de tras para frente em b: %s \n\n", ;     system("pause");     return 0;}

Meu deus, o erro estava na minha cara e eu não enxerguei hahahaha

Obrigada :D

Link para o comentário
Compartilhar em outros sites

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!