Ir para conteúdo
Fórum Script Brasil
  • 0

Identificador de textos


Creeklear

Pergunta

Teria como alguém me mostrar um caminho para um código que identifique frases no texto, por exemplo eu envio um texto assim "Oi tudo bem?" daí eu teria que salvar toda essa frase em uma variável ? E logo depois a partir dessa frase eu tenha colocado que se houver "tudo bem?" no texto voltar com um resultado de "tudo bem". Alguém poderia me mostrar um caminho para isso, não quero o código, exceto se for para exemplo. Desde já obrigado :)

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

 Olá, se entendi bem sua pergunta, você deseja digitar "Oi tudo bem?", e espera uma resposta como "Tudo bem!" 

 Para a linguagem C podemos fazer isso de algumas maneiras, uma delas é utilizando a função "strcmp".

 A função "strcmp()" compara os chamados "strings" entre si, "strings" nada mais são que um conjunto de caracteres que formão palavras ou frases.

 Para utiliza-la, primeiramente devemos declarar 2 variaveis (as strings),  deste modo:

char str1[] = "Oi tudo bem?";
char str2[30];

 Enfim, tendo declarado as 2 variaveis, devemos agora lêr a "string" a ser comparada da seguinte forma:

scanf("%s", str2);

 O %s faz a leitura de uma "string", porem normalmente  a "string" é interrompida nos "espaços",  para resolver esse problema devemos incluir o comando [^\n] entre a porcentagem e o s da seguinte forma:

scanf("%[^\n]s", str2);

 Desta forma, tudo que for digitado até o pressionamento do "ENTER" será computado.

 Após esse passo devemos utilizar uma condicional junto com a função "strcmp()", para que se o usuário digite "Oi tudo bem",  e receba a resposta "Tudo bem!"

 Faremos isso desta forma:

 if(strcmp(str1,str2) == 0)
        printf("Tudo bem!");

    else
        printf("não entendi!");

Para entendermos o código acima devemos entender um pouco mais como a função "strcmp" funciona:

 A função strcmp() pode retornar um valor nulo (zero), positivo ou negativo.
 Quando as palavras comparadas são iguais, a função retorna 0.
 Quando as palavras comparadas são diferentes e a primeira é maior, a função retorna um valor positivo, caso contrário, a função 
retorna negativo, sendo que no alfabeto a “menor” letra é “a”, e a maior, “z”.

Exemplos:

strcmp(maior,menor) == 1                                                            strcmp(“bb”,”aa”) == 1
strcmp(menor,maior) == -1                                                          strcmp(“aa”,”bb”) == -1
strcmp(grande,grande) == 0                                                        strcmp(“bb”,”bb”) == 0
strcmp(pequeno,pequeno) == 0                                                  strcmp(“aa”,”aa”) == 0

 então oque foi feito na condição If, foi dizer que se as 2 strings forem iguais ele ira dizer "Tudo bem!", senao ele dirá "não entendi!".

 O codigo final ficara assim:

#include <stdio.h>
#include <string.h>

int main ()
{
    char str1[] = "Oi tudo bem?";
    char str2[30];

    scanf("%[^\n]s", str2);

    if(strcmp(str1,str2) == 0)
        printf("Tudo bem!");

    else
        printf("não entendi!");
}

É bastante importante lembrar que para usar este tipo de função é necessário o uso da biblioteca <string.h>
 

Editado por Gabriel Custodio
Link para o comentário
Compartilhar em outros sites

  • 0
Em ‎26‎/‎03‎/‎2018 at 15:08, Gabriel Custodio disse:

 Olá, se entendi bem sua pergunta, você deseja digitar "Oi tudo bem?", e espera uma resposta como "Tudo bem!" 

 Para a linguagem C podemos fazer isso de algumas maneiras, uma delas é utilizando a função "strcmp".

 A função "strcmp()" compara os chamados "strings" entre si, "strings" nada mais são que um conjunto de caracteres que formão palavras ou frases.

 Para utiliza-la, primeiramente devemos declarar 2 variaveis (as strings),  deste modo:


char str1[] = "Oi tudo bem?";
char str2[30];

 Enfim, tendo declarado as 2 variaveis, devemos agora lêr a "string" a ser comparada da seguinte forma:


scanf("%s", str2);

 O %s faz a leitura de uma "string", porem normalmente  a "string" é interrompida nos "espaços",  para resolver esse problema devemos incluir o comando [^\n] entre a porcentagem e o s da seguinte forma:


scanf("%[^\n]s", str2);

 Desta forma, tudo que for digitado até o pressionamento do "ENTER" será computado.

 Após esse passo devemos utilizar uma condicional junto com a função "strcmp()", para que se o usuário digite "Oi tudo bem",  e receba a resposta "Tudo bem!"

 Faremos isso desta forma:


 if(strcmp(str1,str2) == 0)
        printf("Tudo bem!");

    else
        printf("não entendi!");

Para entendermos o código acima devemos entender um pouco mais como a função "strcmp" funciona:

 A função strcmp() pode retornar um valor nulo (zero), positivo ou negativo.
 Quando as palavras comparadas são iguais, a função retorna 0.
 Quando as palavras comparadas são diferentes e a primeira é maior, a função retorna um valor positivo, caso contrário, a função 
retorna negativo, sendo que no alfabeto a “menor” letra é “a”, e a maior, “z”.

Exemplos:

strcmp(maior,menor) == 1                                                            strcmp(“bb”,”aa”) == 1
strcmp(menor,maior) == -1                                                          strcmp(“aa”,”bb”) == -1
strcmp(grande,grande) == 0                                                        strcmp(“bb”,”bb”) == 0
strcmp(pequeno,pequeno) == 0                                                  strcmp(“aa”,”aa”) == 0

 então oque foi feito na condição If, foi dizer que se as 2 strings forem iguais ele ira dizer "Tudo bem!", senao ele dirá "não entendi!".

 O codigo final ficara assim:


#include <stdio.h>
#include <string.h>

int main ()
{
    char str1[] = "Oi tudo bem?";
    char str2[30];

    scanf("%[^\n]s", str2);

    if(strcmp(str1,str2) == 0)
        printf("Tudo bem!");

    else
        printf("não entendi!");
}

É bastante importante lembrar que para usar este tipo de função é necessário o uso da biblioteca <string.h>
 

Nossa cara vlw muito obrigado mesmo, eu fiquei só com uma dúvida: essa função quando compara as duas strings, mesmo que a string enviada pelo usuário seja uma frase maior que a constante definida, mas possua dentro dessa frase algo que está na outra string ela considera como igual ?

Como por exemplo envio: "Oi tudo bem com você?"

e a constante seja "tudo bem". Só de ter "tudo bem" na string ele a considera ?

Editado por Creeklear
esqueci as aspas
Link para o comentário
Compartilhar em outros sites

  • 0

strcmp basicamente compara casinha por casinha até acontecer uma das 3 coisas:


<0 O primeiro caractere que não corresponde tem um valor menor em ptr1 do que em ptr2.
0   O conteúdo de ambas as cadeias são iguais.
>0 O primeiro caractere que não corresponde tem um valor maior em ptr1 do que em ptr2.

Então por exemplo, eu poderia ter tipo:
Screenshot_1.jpg.10f6a4209170e7e085893737ba1f41ab.jpg

strcmp compara a primeira letra de str1 com a primeira letra de str2
Screenshot_2.jpg.b17ba39805c6e5b6667ffc8ff460df6e.jpg

...como são iguais, nada acontece, strcmp passa a comparar a segunda letra de str1 com a segunda letra de str2:

Screenshot_3.jpg.617c274af1a967f86f722ba900efc892.jpg

...acontece a mesma coisa. Por enquanto as letras comparadas forem iguais o programa segue adiante, até se certificar que TODAS as letras são idênticas, nesse caso retornaria 0.

Mas que acontece se passar isso?:
Screenshot_4.jpg.cda76f4172c66547298e772bc47e76d7.jpg

Então neste caso, na str2, 'b' é menor que 'c' que está na str1, e neste caso, strcmp para de fazer a comparação, pois ele já sabe a essa altura se são iguais ou diferentes, e também qual é a menor string em caso de serem diferentes.

Para saber o resultado olhamos a tabela abaixo e identificamos o caso que aconteceu:

  • -A letra é menor em str1 do que em str2? Então o valor de retorno é menor que zero(-1)
  • -Ambas as cadeias são iguais em todas as casinhas? então retorna zero(0)
  • -A letra é maior em str1 do que em str2? Então retorna maior que zero(1)


Observação: Para saber si uma letra é maior ou menor em relação a outra consulte a tabela asc2, lá você tem em ordem todos os caracteres admissíveis por C/C++ organizados de maior a menor.


Isso acho que já responde sua pergunta, pois de cara já lhe diz que só serve para comparar strings não para buscar uma substring dentro de outra string.

Se quiser algo fácil use a função strstr(), mas como você é um estudante, não lhe quero enganar, caso você opte pelo caminho mais fácil nunca será um bom programador, pois o certo é você fazer esse exercício você mesmo sem ajuda de funções, e certamente seu professor quer assim, pois desse modo você aprende o que acontece internamente dentro das funções.

Agora bem... a coisa funciona dessa forma:
Imaginando que você tem:
Screenshot_1.jpg.b9254d49877e5ef8cfbbddf1d6cc1a19.jpg
Se quiser buscar um string dentro de outra, percorra letra por letra da string(str1) até ela coincidir com a primeira letra da substring(str2) que você está buscando.
Screenshot_2.jpg.67742c40306db91caf04077d191df0f6.jpgScreenshot_3.jpg.e61fb77c3d4f0df230f26bc9f79a0e71.jpgScreenshot_4.jpg.58cd63460d05b6cf41ca30ccfa6e1bb5.jpgScreenshot_5.jpg.76531c27ce064a456e00f37c6957df5a.jpg


Então neste ponto faça a mesma coisa que a strcmp... comparar letra por letra, mas só que desde este ponto:
Screenshot_6.jpg.8d0e0f9cd8575d61df0ba3c2616fbcaf.jpgScreenshot_7.jpg.00c96034ecb615553741ee1eaef54196.jpg

Até chegar na ultima letra da substring:
Screenshot_8.jpg.6b6bd5d218dd9e3dfa6145ec69c53a6e.jpg


Si a substring terminou e todas as letra analisadas foram iguais, então o resultado é SIM! Está contido a substring dentro da string. Caso não coincidir lembre que estávamos na letra 't' da string1: deveríamos repetir os passo desde esse ponto, até coincidir com a primeira letra da substring, pois a substring poderia estar mais adiante, por isso devemos continuar averiguando.

Lhe sugiro que desenhe os passos em papel que seu programa vai ter, com isso você terá uma idéia melhor de qual são os passos a seguir.

Sei que não é muito mas isso é algo que você tem que realizar e não eu hehe, somente quero lhe dar uma guia. Lhe desejo boa sorte.
 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...