Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Gabriel Bras

C++ RESOLVIDO Comparar strings em C/C++

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites
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

Compartilhar este post


Link para o post
Compartilhar em outros sites
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

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado (editado)

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.

Editado por isrnick
  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

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
*/ 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado (editado)

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;
}
Editado por isrnick

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×