Olá,
Se eu inserir uma frase em um array de char, e depois quiser procurar uma palavra qualquer nessa frase, é possível fazer isso em linguagem C, existe alguma função que resolva isso?
Olá,
Se eu inserir uma frase em um array de char, e depois quiser procurar uma palavra qualquer nessa frase, é possível fazer isso em linguagem C, existe alguma função que resolva isso?
Função strstr localizada no cabeçalho string.h
https://www.tutorialspoint.com/c_standard_library/c_function_strstr.htm
Tenho duas duvidas.
void verificarPalavra(char frase[], char palavra[]){
char *res;
res = strstr(frase, palavra);
if(strcmp(res, palavra) >= 0){
printf("Contem palavra na frase!");
}else{
printf("Nao contem palavra na frase!");
}
}
main(){
char frase[50] = "Julio Verne - Tres Russos e Tres Ingleses";
char palavra[10] = "Russos";
verificarPalavra(frase, palavra);
}
1 - Pq meu algoritmo não entra no else, caso a condição seja falsa?
2 - Pq meu algoritmo retorna como verdadeiro, caso procure apenas parte de uma palavra? Por exemplo: Se eu procurar por “Rus”, a condição sera verdadeira, entendendo que essa palavra está contida na frase.
Se você ver o tipo de retorno da função, caso a palavra não existe ela retorna NULL, logo seu teste pode ficar…
char *res;
res = strstr(frase, palavra);
if (res != NULL) {
printf("Contem palavra na frase!");
} else {
printf("Nao contem palavra na frase");
}
1 - Seu algoritmo não entra no else porque a função strcmp pode retornar 3 valores:
Como você usou >= 0 ele nunca vai entrar no else…
2 - a função strstr se baseia em caracteres e não palavras fechadas, ou seja, um pequeno trecho se combinar com a frase, será considerado true e o trecho retorna pela função, caso contrário é null como te mostrei acima…
Seria possível fazer com que o código ignora-se todos os caracteres seguintes a palavra encontrada?
Não entendi, a exemplo do Rus, a função strstr não está te atendendo nisso?
Se eu fizer um printf da palavra encontrada, ele ira imprimir toda a frase a partir do conjunto de caracteres encontrados.No caso se eu procurar por “Russos”, o printf irá imprimir:“Russos e Tres Ingleses”;
Ae minha dúvida. Seria possível fazer o código ignorar o restante da frase, depois do “Russos”?
E como está o printf?
if (res != NULL) {
printf("Contem %s na frase!", palavra);
} else {
printf("Nao contem %s na frase", palavra);
}
void verificarPalavra(char frase[], char palavra[]){
char *res;
res = strstr(frase, palavra);
if(res != 0){
printf("Contem palavra na frase!");
printf("%s", res);
}else{
printf("Nao contem palavra na frase!");
}
}
Editei o código acima, o melhor seria usar a variável passada como parâmetro certo?
O res serve apenas para identificar que o trecho existe, e além do mais compare com NULL, é uma boa prática ao invés de 0…
E se quiser um destaque na palavra encontrada faça…
printf("Contem \"%s\" na frase!", palavra);
Esse é o problema, se eu procurar apenas parte de uma palavra, a condição sera verdadeira! Tem como impedir isso?
Nesse caso creio não ter muita alternativa, vai ter de “fazer na mão” mesmo…
Vlw.
Cara, fiz um esquema aqui usando strtok e strcmp me baseando pelos espaços na frase, veja se ajuda…
Mas nesse caso, tome cuidado com acentuações e comparar palavras maiusculas com minusculas…
char *token = strtok(frase, " ");
int encontrou = 0;
while (token != NULL) {
if (strcmp(token, palavra) == 0) {
encontrou = 1;
break;
}
token = strtok(NULL, " ");
}
if (encontrou) {
printf("Contem \"%s\" na frase!\n", palavra);
} else {
printf("Nao contem \"%s\" na frase\n", palavra);
}
No caso se você digitar “Russos” ele encontra, se digitar “Rus” ou “Russo” ele não encontra…