Ir para conteúdo

Arquivado

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

Pulse

String 2

Recommended Posts

Escreva um programa que contenha uma função. Esta função deve ler uma string e depois copiar todas
as vogais para uma string chamada vog e as consoantes para uma string chamada cons. A função deve
imprimir na tela estas duas novas strings.
#include <stdio.h>
#include <string.h>

int main ()
{
	char entrada[100], vog[100], cons[100];
	int i, v=0, c=0;

	puts("Entre com uma string");
	gets(entrada);

	for(i=0; i<100; i++)
	{
		if(entrada[i] == 'a' || entrada[i] == 'e' || entrada [i] == 'i' || entrada[i] == 'o' || entrada[i] == 'u')
		{
			vog[v] = entrada[i];
			v++;
		}
		else if(entrada[i] != ' ' && entrada[i] != '.' && entrada[i] != ',' && entrada[i] != "\0")
		{
			cons[c] = entrada[i];
			c++;
		}
	}

	puts(cons);
	puts(vog);
}

O único problema é que o programa tá imprimindo alguns caracteres estranhos depois do resultado, nesse caso, por exemplo, imprimiu i. Em outros testes imprimiu !♥W e outras coisas do tipo.

75SdyJ5.png

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não use gets.
Os caracteres estranhos são impressos muito provavelmente porque não há '\0' no final da string.

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAX 100

void separa_letras(char * dest_vogal, char * dest_cons, char * src) {
  unsigned int i,j,k;
  for(i=0, j=0, k=0; i<strlen(src); i++) {
    switch (tolower(src[i])) {
      case 'a':
      case 'e':
      case 'i':
      case 'o':
      case 'u':
         dest_vogal[j] = src[i];
         j++;
         break;
      default:
         dest_cons[k] = src[i];
         k++;
   }
  }
  dest_vogal[j]='\0';
  dest_cons[k]='\0';
}

int main(void) {
  char str[MAX];
  fgets(str, MAX-1, stdin);
  str[strlen(str)-1] = '\0';

  char vog[strlen(str)], cons[strlen(str)];
  separa_letras(vog, cons, str);

  printf("%s\n%s\n", vog, cons);
  return 0;
}

A propósito: procure ler sobre coesão e acoplamento. Em termos simples relacionado com o exercício, uma função dessas, ao imprimir e fazer sei lá mais o quê além do que ela se propõe, começa a ter uma baixa coesão (idealmente as funções, para poderem ser mais reutilizáveis, devem fazer apenas 1 coisa). Isso vai ajudar muito nos trabalhos mais complexos.

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.