Ir ao conteúdo
  • Cadastre-se

Inversão de String


yumilia
Ir à solução Resolvido por Midori,

Posts recomendados

/*Tentei inverter porém mesmo assim não funciona, já vi um post relacionado com isso, tentei modificar para que funcionasse, só que não inverte*/

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

 

int main() 

{

int i, tam, ordem, x;

char string [100], string2 [100];

printf ("Digite uma string:");

gets (string);

fflush (stdin);

tam = strlen (string);

printf ("Digite 1 para ordem direta ou 2 para ordem indireta:");

scanf ("%d", &ordem);

switch (ordem)

{

case 1:

printf ("O vetor em ordem direta é: %s", string);

break;

 

case 2:

for (i=tam-1; i>=0; i--)

{

for (x=0; x<tam; x++)

string2[x] = string;

}

printf ("O vetor em ordem indireta é: %s", string2);

break;

 

default:

printf ("Opcao que nao existe");

}

getch ();

return 0;

}

Link para o comentário
Compartilhar em outros sites

  • Solução

Você só precisa de um loop para inverter.

No próprio for você pode incrementar/decrementar a cada ciclo.

    i = strlen(string);    string2[i + 1] = '\0';    for(--i, n = 0; i >= 0; i--, n++){        string2[n] = string[i];    }

Mas se você quer apenas imprimir a string invertida, e não vai precisar usar string2.

Pode fazer assim,

    for(i = strlen(string); i >= 0; i--){        putchar(string[i]);    }
Link para o comentário
Compartilhar em outros sites

Lembre-se que o ultimo caracter de uma string é o \0 .

Exemplo:

 

| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8  | 9 | 10 | 11 | .. | 99 |

| c | a | c | h | o | r  | r  | o | \0 |    |      |      |    |      |

 

Na sua inversão você esqueceu de por o caracter '\0' no final de sua string! Ou pode-se acontecer também de durante a inversão você tê-lo colocado no id 0 de seu vetor(array) ficando assim:

 

| 0  | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8  | 9 | 10 | 11 | .. | 99 |

| \0 | o | r  | r | o | h | c  | a | c  |    |      |      |    |      |

 

 

não mostrando string alguma. O certo seria:

 

| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |  8  | 9 | 10 | 11 | .. | 99 |

| o | r  | r | o | h | c | a  | c | \0  |    |      |      |    |      |

 

Use uma das soluções citadas pelo olliver.soul-senpai

Link para o comentário
Compartilhar em outros sites

Você só precisa de um loop para inverter.

No próprio for você pode incrementar/decrementar a cada ciclo.

 

    i = strlen(string);    string2[i + 1] = '\0';    for(--i, n = 0; i >= 0; i--, n++){        string2[n] = string[i];    }
Mas se você quer apenas imprimir a string invertida, e não vai precisar usar string2.

Pode fazer assim,

    for(i = strlen(string); i >= 0; i--){        putchar(string[i]);    }

Tipo pra que serve putchar?

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