Olá Pessoal, estou com uma dúvida, gostaria de saber como comparar um caracter (digitado pelo usuario) se possui no meu vetor de string. Pelo o que li a respeito a função strcmp compara apenas dois vetores ( de caracter ou inteiro) Exemplo //inteiro vet.codigo == x //string vet.nome == letra // supondo que letra esteje declarada como vetor(letra[30]). Meu código está assim: struct dados { int codigo; char nome[30]; float n1,n2; }; int main() { dados vet[100]; int ultimo=0,i; char achouletra; printf("==================\n"); printf("informe primeira letra do nome:"); scanf("%c",&achouletra); for(i=0;i<30;i++) // não sei se esse for esta correto { if(?) // como faço a comparação? { printf("codigo = %d\n",vet.codigo); printf("nome = %s\n",vet.nome); } } } 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; }
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
How do I compare these two character arrays to make sure they are identical? char test[10] = "idrinkcoke" char test2[10] = "idrinknote"I'm thinking of using for loop, but I read somewhere else that I couldnt do test[i] == test2[i] in C. I would really appreciate if someone could help this. Thank you.
"Não consegue" fazer a comparação com operadores relacionais pois as variáveis que representam os vetores são ponteiros para os seus primeiros elementos. Por esse motivo quando compara por exemplo com == está a comparar se os ponteiros tem o mesmo valor, ou seja, apontam para o mesmo local na memoria. Isso só irá acontecer se forem o mesmo vetor. Em relação ao facto de estarem ou não numa área estática não vai influenciar em nada a comparação. Considere o seguinte exemplo: char texto1[] = "um texto"; char texto2[] = "um texto"; printf("\n%d", texto1 == texto2); //0 - que representa falso char *texto3 = texto1; printf("\n%d", texto1 == texto3); //1 - que representa verdadeiroNo ultimo exemplo texto3 foi um ponteiro que coloquei manualmente a apontar para o vetor texto1. Em contraste, comparar com <= ou >= apenas lhe vai dizer se um ponteiro é maior que o outro, que não é util. A comparação deve então ser feita com um laço/ciclo, que passa a cada letra e faz a comparação entre cada vetor. Utilizando uma versão bem simples poderia fazer assim: int compara_strings(char str1[], char str2[]){ int i; for (i = 0; str1[i] != '\0' && str2[i] != '\0'; i++){ //assim que uma letra seja diferente if (str1[i] != str2[i]){ //retorna -1 se a primeira for menor ou 1 caso contrário return str1[i] < str2[i] ? -1 : 1; } } //Se as duas acabaram, são iguais e retorna 0. Se a str1 acabou e str2 não //retorna um valor negativo. Se str2 acabou e a str1 retorna um valor positivo return str1[i] - str2[i]; }Repare que aqui os retornos tem significados especificos:
Quando se diz que uma string é maior ou menor, é uma comparação lexicográfica (alfabética). No entanto estaria a reinventar a roda pois já existe uma função para fazer esta mesma comparação em <string.h> que se chama strcmp. Utilizar essa função no exemplo inicial seria: char texto1[] = "um texto"; char texto2[] = "um texto"; printf("\n%d", strcmp(texto1,texto2)); //0 - que representa iguais |