Ir ao conteúdo

C++ Comparar strings em C/C++


Ir à solução Resolvido por isrnick,

Posts recomendados

Postado
int dir(char **matriz, char *palavra, int n){
    int i, j, k, cont = 0;
     
    for(i=0; i < n; i++){
        k=0;
        for(j=n-1; j >=strlen(palavra); j--){
            if(matriz[i][j] == palavra[k]){  
                k++;
                if(palavra[k] == '\0'){
                    cont++;
                    break; 
                }
            }else k = 0;
        }
    }
    return cont;
}

galera, essa função faz parte de um programa que procura palavras numa determinada matriz de char. Ela verifica se a palavra existe na matriz quando a gente olha da direita pra esquerda. Só que eu não tô conseguindo entrar no if. Alguém pode me ajudar? Provavelmente é alguma coisa muito boba e eu tô moscando. 

  • Curtir 2
Postado
2 horas atrás, Gabriel Bras disse:

quando a gente olha da direita pra esquerda

O que você quer dizer com isso? Verifica ao contrário? De alguns exemplos para entendermos o que a função deveria verificar...

  • Curtir 2
Postado
27 minutos atrás, isrnick disse:

O que você quer dizer com isso? Verifica ao contrário? De alguns exemplos para entendermos o que a função deveria verificar...

tipo: 
em determinada linha da matriz tem:
I X A C A B A 
e a entrada é 
ABACAXI

  • Curtir 2
Postado

Tem que ser:

 

I X A C A B A

 

mas estes:

 

E C I X A C A B A

I X A C A B A P O

 

Não são válidos, certo?

 

Então eu faria assim:

int dir(char **matriz, char *palavra, int n){
    int i, j, cont = 0, len = strlen(palavra);
    
    for(i=0; i < n; i++){
        //Incrementa o contador enquanto as letras forem iguais,
        //e enquanto ainda tiver letras na palavra:
        for(j=0;  len-1 - j >= 0 && matriz[i][j] == palavra[len-1 - j]; j++);
        
        //Se o contador de letras iguais for igual ao comprimento da palavra,
        //e a palavra da matriz também chegou ao fim, então incrementa o
        //contador de palavras iguais:
        if( j == len && matriz[i][j] == '\0' )
            cont++;
    }
    
    return count;
}
        
        

 

Edit: Corrigir erro, o correto é len-1-j não len-1-i.

  • Curtir 2
Postado

pior que são. eu fui muito simplista. na matriz de char que eu coloquei, eu quero encontrar por exemplo, a palavra alfandega (linha de indice 5, da coluna 15 até a coluna 7). 
 

/*
b n h p b j r x y u g e h x g j o l z n 
e h u g v k d i l w s o j a d m l u k l 
q s s y q y j g l i t q s n y e b e b n 
a q c j q h y e e i p w c h u s f f a r 
q w j i l j x l l v b l o f w g m u k s 
e a p h j l b a g e d n a f l a c q x p 
o a c e f z k t v v m a x d j g q m x j 
q h s q c l c h e b w u b z y g a i b v 
f n x c s i l j v i u l s p c u a g b g 
h a a i b a q b j r y q h w t z g e k b 
o f p g u r d w x g f g g h o h i g k t 
z j j g h e i p i u r z z g h v z k u y 
t b e z i u j q a v l b g x i n b s d m 
m w l o e s l d f h d y i h z r d k j f 
g v g m u q c v i h h v f u l j n w o u 
e r s m a t f d e p k k m q y g h a b p 
j l m o f x x u u l o a e i o e c u j i 
j t s x m s f t t g k c t x r z u q t q 
e k s i s h p w b y e m u y j g r o b k 
w l o q i h r f y m x c y q m r z b p a
*/ 

 

  • Solução
Postado

Nesse caso o problema é o j >=strlen(palavra); no segundo for, deveria ser j >= 0; pois k ainda pode estar incrementando e desse jeito você para antes de chegar ao fim da palavra se a palavra é muito longa (como nesse caso do "alfandega").

int dir(char **matriz, char *palavra, int n){
    int i, j, k, cont = 0;
     
    for(i=0; i < n; i++){
        k=0;
        for(j=n-1; j >= 0; j--){
            if(matriz[i][j] == palavra[k]){  
                k++;
                if(palavra[k] == '\0'){
                    cont++;
                    break; 
                }
            }else k = 0;
        }
    }
    return cont;
}
Postado

Cara kkkkkk tô até com vergonha. Eu sou um *****. O código tá certinho. O problema era minha entrada. Eu esqueci do case sensitive e tava entrando com letras minúsculas, mas a matriz tá com letras maiúsculas. kkk. Valeu e desculpa pelo seu tempo 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

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

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!