Como comparar strings em um if em c

Dadas duas strings s1 e s2 , a tarefa é escrever um programa em C para comparar as duas strings sem usar a função strcmp() . Se a string for igual, imprima “Strings iguais” senão imprima “Strings desiguais” .

Exemplos:

Entrada: s1 = “geeksforgeeks”, s2 = “geeks”
Saída: Strings desiguais

Entrada: s1 = “geeksforgeeks”, s2 = “geeksforgeeks”
Saída: Strings iguais

Abordagem: Existem três casos possíveis que ocorrem quando comparamos duas strings:

  1. Ambas as strings são iguais, significa que a diferença do valor ASCII entre as duas strings é 0 .
  2. Ambas as strings são diferentes significa que o valor ASCII do primeiro caractere não correspondente na primeira string é menor do que a segunda string, então a diferença entre as duas strings é (<0) .
  3. Ambas as strings são diferentes significa que o valor ASCII do primeiro caractere não correspondente na primeira string é maior do que a segunda string, então a diferença entre as duas strings é (> 0) .

Com base nas três condições acima, a ideia é comparar cada caractere das strings fornecidas, uma a uma, sempre que ocorrer a condição 2 ou 3 e, em seguida, imprimir “Strings desiguais” do contrário imprimir “Strings iguais” .

Abaixo está a implementação da abordagem acima:

// C program to compare the two strings // without using strcmp() function #include <stdio.h> // Function that compares the two string void compareStrings(char* x, char* y) { int flag = 0; // Iterate a loop till the end // of both the strings while (*x != '\0' || *y != '\0') { if (*x == *y) { x++; y++; } // If two characters are not same // print the difference and exit else if ((*x == '\0' && *y != '\0') || (*x != '\0' && *y == '\0') || *x != *y) { flag = 1; printf("Unequal Strings\n"); break; } } // If two strings are exactly same if (flag == 0) { printf("Equal Strings\n"); } } // Driver Code int main(void) { // Given strings s1 and s2 char s1[20] = "python"; char s2[20] = "dsa"; // Function Call compareStrings(s1, s2); return 0; }

Complexidade de tempo: O (N)
Espaço auxiliar: O (1)

Quer aprender com os melhores vídeos com curadoria e problemas práticos, confira o C Foundation Course for Basic to Advanced C.

Olá Galera. Eu já tenho conhecimento em programação, mas iniciei em C há alguns dias apenas. Eu estou praticando Operadores Relacionais e Operadores Lógicos.

Eu tenho um char nome[5]; e o valor que é atribuido a ele não bate com a String que eu comparo. Gostaria de ajuda para resolver isso.


Estou usando a string "Teste" como exemplo, eis o código-fonte:

#include <stdio.h> int main(void) { char nome[5]; int idade; printf("Escreva o seu nome: "); //Escreva Teste scanf("%s", &nome); printf("Escreva a sua idade: "); scanf("%d", &idade); if(idade > 0 && nome == "Teste") { printf("Resultado: Encontrado"); } else { printf("Resultado: Nao encontrado"); } return 0; }

  1. C != C++
  2. Se uma coisa compila em C, não quer dizer que vai funcionar
  3. Você precisa ler sua apostila. O método para comparar 2 strings em C se chama “strcmp”.

Exemplo:

if (strcmp (nome, "Teste") == 0) ...
  1. Sempre que você criar uma string em C, você precisa definir um array de char com mais espaço que você pensa em usar, porque pelo menos o terminador da string (\0) é necessário guardar. No seu caso, em vez de ser econômico, declare com char nome [128].

Cara, segue o site abaixo que pode solucionar boa parte das tuas dúvidas em C…

//www.cplusplus.com/reference/clibrary/

Sobre comparar duas strings em C…

//www.cplusplus.com/reference/cstring/strcmp/

Só a título de curiosidade, quando você faz nome == “Teste” você está comparando o valor de endereço deles na memória.

[quote=entanglement]1) C != C++ 2) Se uma coisa compila em C, não quer dizer que vai funcionar

3) Você precisa ler sua apostila. O método para comparar 2 strings em C se chama “strcmp”.

Exemplo:

if (strcmp (nome, "Teste") == 0) ...
  1. Sempre que você criar uma string em C, você precisa definir um array de char com mais espaço que você pensa em usar, porque pelo menos o terminador da string (\0) é necessário guardar. No seu caso, em vez de ser econômico, declare com char nome [128].

[/quote]
Obrigado já corrigi o que estava errado e agora está funcionando. Eu não sabia da existência do método. Na verdade esse exemplo não está no livro que eu estou lendo.

Só complementando, para comparar ignorando letras maiúsculas/minúsculas, basta usar o stricmp.

Valeu

Seja muito bem vindo à aula 136 do nosso curso gratuito de programação com a linguagem C.

Na aula de hoje vamos aprender como comparar duas strings com a função strcmp() na linguagem de programação C.

Em muitas situações é necessário a comparação de strings. Essa operação se torna muito simples com a função strcmp(), como visto a seguir:

char str1[100] = {"Bom dia"}; char str2[100] = {"Bom dia"}; int resultado; resultado = strcmp(str1, str2);

A função strcmp() pode retornar 3 possíveis valores inteiros:0 = se a duas strings são iguais.-1 = se a primeira string ocorre primeiro que a segunda;

1 = se a segunda string ocorre primeiro que a primeira.

Olá, pessoal, quero comparar duas strings porém o resultado não está retornando o que é esperado, que nesse caso seria o índice na função busca_nome, o erro está na quarta linha da função busca, mas estou disponibilizando todo código. o teste da quarta linha não esta retornando verdadeiro nem quando as duas strings são iguais, alguém sabe me dizer por que? Grato desde já.

/* * File: main.c * Author: pmargreff * * Created on 6 de Novembro de 2014, 00:25 */ #include <stdio.h> #include <stdlib.h> #define MAX 100 struct end { char nome[100]; char rua[100]; char cidade[100]; char estado[100]; unsigned long int cep; } info[MAX]; /* * struct para conseguir comparar * dois nomes em diversas funções */ struct compara { char nome[100]; } busca; void cria_lista(void); void insere(void); void apaga(void); void imprime(void); int menu(void); int livre(void); void ler_string(char palavra[100], int tamanho); int main(void) { int escolha; cria_lista(); for (;;) { escolha = menu(); switch (escolha) { case 1: insere(); break; case 2: apaga(); break; case 3: imprime(); break; case 4: exit(0); break; } } } void cria_lista(void) { int i; for (i = 0; i < MAX; i++) info[i].nome[0] = '\0'; } int menu(void) { int c = 0; do { printf("-- MENU:\n"); printf("\t 1. Inserir um nome\n"); printf("\t 2. Excluir um nome\n"); printf("\t 3. Listar o arquivo\n"); printf("\t 4. Sair\n"); printf("-- Digite sua escolha: "); scanf("%d", &c); } while (c <= 0 || c > 4); getchar(); return c; } void ler_string(char palavra[100], int tamanho) { int i = 0; char c; c = getchar(); while ((c != '\n') && (i < tamanho)) { palavra[i++] = c; c = getchar(); } palavra[i] = '\0'; if (c != '\n') { c = getchar(); while ((c != '\n') && (c != EOF)) { c = getchar(); } } } void insere(void) { int posicao; posicao = livre(); if (posicao == -1) { printf("\nEstrutura Cheia!!"); return; } printf("-- Registro %d:\n", posicao); printf("\t Nome: "); ler_string(info[posicao].nome, 30); printf("\t Rua: "); ler_string(info[posicao].rua, 40); printf("\t Cidade: "); ler_string(info[posicao].cidade, 20); printf("\t Estado: "); ler_string(info[posicao].estado, 2); printf("\t CEP: "); scanf("%lu", &info[posicao].cep); } int livre(void) { int i; for (i = 0; info[i].nome[0] && i < MAX; i++); if (i == MAX) return -1; return i; } /* * chama a funçao busca_nome que retorna o indice * para a variavel posicão que devera ser apagado * se nenhum nome igual for encontrado retorna -1 */ void apaga(void) { int posicao; posicao = busca_nome(); if (posicao >= 0 && posicao < MAX) info[posicao].nome[0] = '\0'; } void imprime(void) { int i; for (i = 0; i < MAX; i++) if (info[i].nome[0] != '\0') { printf("-- Registro %d:\n", i); printf("\t Nome: %s", info[i].nome); printf("\t Rua: %s", info[i].rua); printf("\t Cidade: %s", info[i].cidade); printf("\t Estado: %s\n", info[i].estado); printf("\t CEP: %lu\n", info[i].cep); } } /* * função que faz a busca de um nome no programa * le o nome que está localizado na struct busca.nome * e retorna o indice se encontrar nome igual ou * -1 se não encontrar nome como aquele */ int busca_nome(void) { int i; ler_string(busca.nome, 30); for (i = 0; i < MAX; i++) { if (info[i].nome == busca.nome){ return i; } } return -1; }

Última postagem

Tag