Usuário com melhor resposta
Comparar vetores do tipo char (Linguagem C)

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; }
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
- Sugerido como Resposta Samuel Rodrigues dos Anjos quinta-feira, 28 de novembro de 2013 21:26
- Editado Samuel Rodrigues dos Anjos quinta-feira, 28 de novembro de 2013 21:26
- Marcado como Resposta Endzt sexta-feira, 29 de novembro de 2013 02:27
Todas as Respostas
-
-
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++; }
-
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
- Sugerido como Resposta Samuel Rodrigues dos Anjos quinta-feira, 28 de novembro de 2013 21:26
- Editado Samuel Rodrigues dos Anjos quinta-feira, 28 de novembro de 2013 21:26
- Marcado como Resposta Endzt 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, " "); }