Ir ao conteúdo

String C++


ctrlv

Posts recomendados

Postado

A linguagem é C++

olá pessoal eu sou a carol e estou com uma dúvida nesse programa.

É pra ele ler uma string e inverte-la.

Ex.: CAROL - LORAC

Eu não estou conseguindo ele não inverte os ultimos caracteres ele faz o seguinte: CAROL - CARAC

já tentei mil coisas e não consegui.

 
#include <stdio.h>
#include <conio.h>
void inverte(char palavra[]){
int i;
int j;
for(i=0; palavra[i]!=0; i++);
for(j=0; palavra[j]!=0; j++);
for (i=0,j--;i<j;i++,j--){
palavra[j]=palavra[i];

if (j==0) break;

}
}
void main() {
char palavra[50];
clrscr();
printf("Digite uma palavra: ");
gets(palavra);
printf("\n A palavra lida foi %s", palavra);

inverte(palavra);
printf("\n A palavra invertida ‚ %s",palavra);
getch();
}

  • Membro VIP
Postado

A função inverte me parece errada, identei ela corretamente e adicionei os comentários dizendo o que algumas linhas fazem:


void inverte(char palavra[]){
int i;
int j;
for(i=0; palavra[i]!=0; i++);//Essas duas linhas são basicamente iguais
for(j=0; palavra[j]!=0; j++);//o valor de i e j passa a ser o tamanho da string + 1
for (i=0,j--;i<j;i++,j--){
/*i passa a ser 0, o primeiro for agora é inutil,
j agora é o tamanho da string,
esse for sera executado de i = 0 ate a metade da string e
j = final da string ate a metade da string*/
palavra[j]=palavra[i];/*essa linha faz com que os caracters no fim
sejam iguais aos do inicio, mas não modifica os do início, ela deveria
inverter o valor de palavra[j] e palavra[i], use uma variavel temporária para isso*/

if (j==0) break;/*só vai precisar dessa linha se a string for vazia, podia
colocar um if antes de entrar no for*/

}
}

Postado

mas aparece alguns caracters no fim da palavra após ela ser invertida, exemplo> carol - locar☺☻◘♥


#include <stdio.h>
#include <conio.h>
inverte(char palavra[])
{
int i;
int j;
int tamanho_palavra;
char palavra_inv[50];
for(j=0; palavra[j]!=0; j++);

tamanho_palavra = j;
for (i=0, j--; i<tamanho_palavra; i++,j--)
{
printf("\n teste ");
printf("\n j: %d", j);
printf("\n i: %d", i);
palavra_inv[i]=palavra[j];
printf("\n teste: %c", palavra_inv[i]);
}
return palavra_inv;
}
void main() {
char palavra[50];
clrscr();
printf("Digite uma palavra: ");
gets(palavra);
printf("\n A palavra lida foi %s", palavra);
printf("\n A palavra invertida ‚ %s", inverte(palavra));
getch();
}


  • Membro VIP
Postado

O problema é que falta um "\0" para marcar o final da palavra "palavra_inv", colocar um "palavra_inv[tamanho_palavra] = '\0';" depois de inverter resolve.

  • 3 meses depois...
Postado

Saudações,

achei bastante interessante este tópico, gostava de saber acrescentando ao programa do ctrlv como é possível fazer o seguinte.

Escreva um nome: Rui

Resultado: rui,iur,iru,riu,uir,uri

Abraços

Arquivado

Este tópico foi arquivado e está fechado para 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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!