none
Comparar vetores do tipo char (Linguagem C) RRS feed

  • Pergunta

  • Primeiramente, boa noite a todos. 

    O problema é o seguinte:

     

    Eu tenho um vetor char chamado alfa, e o outro vetor, chamado mensagem.

    O vetor alfa contém as 26 letras do alfabeto, e o vetor mensagem, contém algo digitado pelo usuário, com um máximo de até 1000 caractéres.

     

    Eu preciso fazer com que, cada caractére da variável mensagem, seja comparada à cada caractére da variável alfa, e que, quando for verdadeiro (ou seja, quando forem iguais ambos os caractéres), a posição desse caractére (já que é um vetor) na variável alfa, seja jogado em outro vetor,  por exemplo, um vetor do tipo char, chamado novamensagem.

     

    Por exemplo. Tendo uma mensagem "abcde", e meu alfa sendo "abcdefghijklmnopqrstuvwxyz".

    Ao comparar mensagem[0] com alfa[0], ambos serão "a", então, como "a" ocupa a 1ª posição no vetor, 

    a 1ª posição do vetor novamensagem[0], deverá ter o valor 1, em seguida, ele irá comparar, mensagem[0] com alfa[1],alfa[2], e assim por diante, mas como não serão mais iguais, não retornará mais nenhum valor.

    E assim por diante, até alfa[4], que será a letra "e", que nesse caso, terá que retornar o valor 5, que é a posição da letra"e" no vetor alfa..

     

    Agradeço desde já por qualquer ajuda.

     

    Segue abaixo meu código. Só preciso implementar esta função.

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <conio.h>
    
    int main (void)
    {
    	/*declaração de variáveis do tipo char*/
    	char alfa[27];
    	char mensagem[1000];
    	int novamensagem[1000];
    	int cont = 0;
    	int j = 0;
    	
    	/*atribuição de ponteiro do tipo file, para o arquivo crip.txt, no modo escrita "write"*/
    	FILE *file;
    	file = fopen("C:/Users/Denis/Desktop/Crip.txt", "w");
    	
    	printf("Digite sua mensagem:\n");
    	/*lê mensagem digitada por usuario, e atribui à variável mensagem*/
    	scanf("%[A-Z a-z0-9]", &mensagem); 
    		
    	/*Conta o número de caractéres do vetor mensagem*/
    	while (mensagem[cont] != NULL)
    	{
    		cont++;
    	}
    		
    		
    	
    	
    	/*atribuição de ponteiro do tipo file, para o arquivo alfa.txt, no modo leitura "read"*/
    	FILE *abcd;
    	abcd = fopen("C:/Users/Denis/Desktop/alfa.txt", "r");
    	
    	/*lê conteúdo do arquivo alfa, até o caractere ser nulo, e joga na variável alfa*/
    	while (fgets(alfa, 27, abcd) != NULL)
    	
    
    
    for (int abc = 0; abc < 27; abc++)
    {
    	for (int i = 0; i <= cont; i++)
    	{
    		if (mensagem[i].Equals(alfa[abc]))
    		{
    			novamensagem[j] = abc;
    			j++;
    		}
    		else
    		{
    			j = j;
    		}
    	}
    	
    }
    
    	fprintf(file, "%d", novamensagem);
    	fclose(file);
    	fclose(abcd);
    	printf("Sua mensagem foi salva com sucesso.");
    	getch();
    	return 0;
    }

    quinta-feira, 28 de novembro de 2013 00:02

Respostas

  • Cara,

    Em CSharp utilizamos um comando chamado Split, creio que em C deva ser strtok. Pois dessa forma você pode quebrar em um vetor pelo espaço.


    Atenciosamente, Samuel dos Anjos


    quinta-feira, 28 de novembro de 2013 21:26

Todas as Respostas

  • Cara,

    Qual o problema no seu código?

    Obs.

    Não precisa dessa linha:

    else
    {
       j = j;
    }

    Pois ela está sendo inútil.


    Atenciosamente, Samuel dos Anjos

    quinta-feira, 28 de novembro de 2013 03:04
  • Eu não sabia como fazer a comparação entre 2 strings, e retornar a posição numérica, caso alguma combinação fosse igual.

    Isto eu já descobri como fazer, depois de quebrar um pouco a cabeça, mas aproveitando o post, estou com outro problema.

    Estou tentando fazer o caminho inverso.

    Eu tenho um arquivo de texto, chamado crip.txt

    Ele está formatado da seguinte forma: 4 5 14 9 19 0 12 9 13 1 0 4 5 0 15 12 9 22 5 9 18 1 

    Tem um espaço, separando cada número.

    Quando eu leio o arquivo, e jogo em um vetor, o espaço também é colocado no vetor, e números como o "14" por exemplo, são tratados como 2 números, número 1, e número 4, ocupando 2 espaços no vetor, e não apenas 1.

    Segue o trecho da minha função.

    	char alfa[28];
    	char mensagem[1000];
    	char nvmsg[1000];
    	int i = 0, j = 0, cont = 0, cont2 = 0;
    
    	FILE *file;
    	file = fopen("C:/Users/Denis/Desktop/crip.txt", "r");
    	while (fgets(mensagem, 1000, file) != NULL)
    	{
    		
    	}
    	
    	/*Conta o número de caractéres do vetor mensagem*/
    	while (mensagem[cont] != NULL)
    	{
    		cont++;
    	}
    
    	FILE *abcd;
    	abcd = fopen("C:/Users/Denis/Desktop/alfa.txt", "r");
    	while (fgets(alfa, 28, abcd) != NULL){
    		
    	}
    	
    
    	while (i < cont)
    	{
    		for (int abc = 0; abc < 28; abc++)
    		{
    
    			if ((mensagem[i] == abc) != NULL)
    			{
    				nvmsg[j] = alfa[abc];
    				j++;
    			}
    		}
    
    		i++;
    
    	}


    quinta-feira, 28 de novembro de 2013 05:48
  • Cara,

    Em CSharp utilizamos um comando chamado Split, creio que em C deva ser strtok. Pois dessa forma você pode quebrar em um vetor pelo espaço.


    Atenciosamente, Samuel dos Anjos


    quinta-feira, 28 de novembro de 2013 21:26
  • Creio que esse comando strtok faça o que eu preciso, agora só preciso descobrir como usar ele na minha função.

    Obrigado Samuel, já ajudou bastante.

    sexta-feira, 29 de novembro de 2013 02:27
  • Consegui fazer o que eu queria usando strtok, leio apenas os trechos antes do espaço.

    Mas agora não sei como jogar esses "trechos" em uma posição do meu vetor msg[].

    O nome do meu token é "parte".

    Segue abaixo meu código

    O que eu consegui, foi dar um printf na mensagem final desejada. Ou seja, sem os espaços.

    Agora eu preciso jogar a 1ª parte na msg[0], a 2ª parte na msg[1], e assim por diante. Sabe como fazer isso Samuel? 

    	strcpy(mensagem2, mensagem);		/*Faz uma cópia da variável mensagem, e coloca na variavel mensagem2*/
    	
    	/*Aloca os valores da var mensagem, corretamente formatados na var msg*/
    	parte = strtok(mensagem2, " ");
    	while (parte)
    	{
    		printf("%s", parte); /*Descobrir um meio de jogar "parte" no vetor msg*/
    		parte = strtok(NULL, " ");
    		
    	}

    sexta-feira, 29 de novembro de 2013 06:49