Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

viciado

strings

Recommended Posts

Recebe uma frase. Inverter a frase e substituie as consoantes por #

 

 

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

int main(){
   char frase[100];
   char inverter[100];
   printf("Digite uma frase\n");
   gets(frase);
   int n;
   n = strlen(inverter);
   inverter[n] = strrev(frase));
   int i;
   for(i=0;i<n;i++){
	   if(inverter[i]!=a || inverter[i] !=e || inverter[i] !=i || inverter[i] !=o  || inverter[i] !=u){
			 inverter[i] = strset(inverter,#);
			 }
			 }
   printf("\n %s \n",inverter);  
  system("PAUSE");
  return 0;
}

Aqui deu erro nas linhas: 12,15 e 16

Compartilhar este post


Link para o post
Compartilhar em outros sites

strrev(frase))

 

Excesso de parênteses.

 

if(inverter!=a || inverter !=e || inverter !=i || inverter !=o || inverter !=u)

 

Caracteres tem que ser envoltos com aspas simples.

 

 

 

PS não respondo mais tópicos com código desorganizado sem tag code.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é OU (||), é E (&&).

 

Se for diferente de 'a' E se for diferente de 'e' E ...

 

 

Isso é um exercício para ser resolvido sem a biblioteca string.h.

Usando a biblioteca fica fácil demais. Esse tipo de exercício é para estudo de manipulação de vetores e string.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

int main(){
   char frase[100];
   char inverter[100];
   printf("Digite uma frase\n");
   gets(frase);
   int n;
   n = strlen(inverter);
   inverter[n] = strrev(frase);
   int i;
   for(i=0;i<n;i++){
	   if(inverter[i]!='a' && inverter[i] !='e' && inverter[i] !='i' && inverter[i] !='o'  && inverter[i] !='u'){
			 inverter[i] = strset(inverter,'#');
			 }
			 }
   printf("\n %s \n",inverter);  
  system("PAUSE");
  return 0;
}
Para qualquer frase

A saída que eu tenho:

"É"

Compartilhar este post


Link para o post
Compartilhar em outros sites

O programa compila mais a resposta que eu tenho é uns numeros

 

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

int main()
{
   char frase[100];
   char *inverso;
   char *trocando;
   printf("Digite uma frase \n");
   gets(frase);
   inverso = strrev(frase);
   if(inverso != 'a' || inverso != 'e' || inverso != 'i' || inverso != 'o' || inverso != 'u'){
			  trocando = strset(&inverso,'#');
			  }
   printf(" \n\n %p \n\n",trocando);
  system("PAUSE");	
  return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora fica um espaço em branco nao imprime nada, o que ponteiro sem memoria alocada ?

 

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

int main()
{
   char frase[100];
   char *inverso;
   char *trocando;
   printf("Digite uma frase \n");
   gets(frase);
   inverso = strrev(frase);
   if(inverso != 'a' || inverso != 'e' || inverso != 'i' || inverso != 'o' || inverso != 'u'){
			  trocando = strset(&inverso,'#');
			  }
   printf(" \n\n %s \n\n",trocando);
  system("PAUSE");	
  return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Repito o que eu disse aqui

 

Você não pode atribuir a "inverso" uma string, pois ele é um ponteiro sem tamanho. Ele simplesmente aponta para uma posição de memória.

 

 

Estude bem ponteiros e resolva esse exercício sem usar a biblioteca string.h

Compartilhar este post


Link para o post
Compartilhar em outros sites

inverso != 'a' || inverso != 'e' || inverso != 'i' || inverso != 'o' || inverso != 'u'

 

Acho que tem que trocar esses or (||) por and (&&).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou tentando implementar a função pra inverter a frase aqui, mas ta f***...alguém dá uma dica? :D

por enquanto fiz isso, mas ta dando erro de segmentação.

 

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

int inverteFrase(char *frase);

int main()
{
	char frase[100];
	int i;
	
	printf("\nDigite uma frase: ");
	scanf("%[^\n]c",frase);

	inverteFrase(frase);
	printf("%s",frase);
	return 0;
}

int inverteFrase(char *frase)
{
	char inverte[200];
	int cont = 0, i = 0;

	while(frase[cont] != '\n')
	{
		cont++;
	}
	strcpy(inverte,frase);
	while(strcmp(inverte,"\n") != 0)
	{
		frase[i] = inverte[cont];
		cont--;
		i++;
	}
	return 0;
}
tipo, ali no scanf, sempre q digitar a frase no final dela vai ter um '\n' neh??

Outra coisa, pra fazer a verificação ali, nao precisa usar strcmp neh?? Fiquei um tempo parado, esqueci td...

Compartilhar este post


Link para o post
Compartilhar em outros sites
Recebe uma frase. Inverter a frase e substituie as consoantes por #

 

for(i=0;i<n;i++){
 if(inverter[i]!=a || inverter[i] !=e || inverter[i] !=i || inverter[i] !=o  || inverter[i] !=u)
		inverter[i] = strset(inverter,#);
 }

 

Por acaso isso não vai substituir espaços, pontos, hífens e outros?

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#define _GNU_SOURCE

int inverteFrase(char *frase);
void substitui(char *frase, const char C);

int main()
{
char *frase = NULL;
int i;
size_t n;
printf("\nDigite uma frase: ");
getline(&frase, &n,stdin);
(*rindex(frase,'\n')) = '\0';

inverteFrase(frase);
printf("%s\n",frase);

substitui(frase,'#');
printf("%s\n",frase);
return 0;
}

int inverteFrase(char *frase)
{
char C;
int inicio, final;
final = strlen(frase)-1;
inicio = 0;
for(;inicio < final; inicio++, final--) {
	C = frase[inicio];
	frase[inicio] = frase[final];
	frase[final] = C;
}

return 0;
}

void substitui(char *frase, const char C) {
int i;
char *P;
const char * CONSOANTES = "bcdfghjklmnpqrstvwxyz";
P = strpbrk(frase, CONSOANTES);
while (P != NULL) {
	(*P) = '#';
	P = strpbrk(frase, CONSOANTES);
};
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.