Ir ao conteúdo
  • Cadastre-se

C Identificar uma String em outra


Liara K

Posts recomendados

Olá, boa noite

 

Estou tentando resolver o seguinte exercício: 

Escreva um programa para contar o número de ocorrências de uma string s em uma string t.

 

Não estou conseguindo acertar exatamente a contagem quando executo, dá um valor muito maior:

Se alguém souber como posso resolver, agradeço desde já.

 

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <conio.h>
#include <string.h>

int main()
{
	setlocale(LC_ALL,"Portuguese");
	
	int i = 0, j = 0, contagem = 0;
	char Sstring[20];
	char Tstring[2000];
	
	printf("\n Digite uma palavra ou uma frase: ");
	gets(Sstring);
	
	printf("\n Digite um parágrafo: ");
	gets(Tstring);
	
	for (i = 0; Sstring[i] != '\0'; i++)
	{
		for (j = 0; Tstring[j] != '\0'; j++)
		{
			if (strcmp(Sstring,Tstring))
			{
				contagem++;
			}
		}
	}
	
	printf(" O número de vezes que a primeira frase aparece no parágrafo é igual a: %i \n", contagem);	
		
    printf("\n");
	system("pause");
	return 0;
}

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@Liara K    com certeza existe muitos modos de fazer esse código ,  e um deles poderia ser assim  :

#define _CRT_SECURE_NO_WARNINGS  //  para usar certas funções no visual studio
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <conio.h>
#include <string.h>

int main()
{
	setlocale(LC_ALL, "Portuguese");

	int i = 0, j = 0, contagem = 0,k=0;
	char Sstring[20],auxiliar[20];                  // um espaço será usado para o finalizador de string \0
	char Tstring[2000];

	printf("\n Digite uma palavra ou uma frase: ");
	fgets(Sstring,19,stdin);                        // gets está ultrapassado e em desuso
	Sstring[strlen(Sstring) - 1] = '\0';            // remove newline pego pelo fgets
	printf("\n Digite um parágrafo: ");
	fgets(Tstring,1999,stdin);                      // gets está ultrapassado e em desuso

	for (i = 0; Tstring[i] != '\0'; i++)            // percorrer a frase toda
	{
		if (Tstring[i] != ' ' && Tstring[i] != '0') // verifica os espaços entre palavras e o final da frase
		{
			auxiliar[k] = Tstring[i];               //  uma string auxiliar receber os caracteres da frase
			k++;
		}
		else
		{
			auxiliar[k] = '\0';                     // finalizador de string para poder comparar
			k = 0;
			if (strcmp(auxiliar, Sstring) == 0 )
			{
				contagem++;
			}
		}
	}
	printf("\n\nO número de vezes que a palavra %s aparece no parágrafo é igual a: %d\n\n\n", Sstring,contagem);
	system("pause");
	return 0;
}

 

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Pode usar essa função para realizar a pesquisa:

Spoiler

/**
 * Verifica se o vetor t possui o vetor s.
 *
 * A função retorna um inteiro representando o status da busca. O valor -1
 * indica que a posição de início não permite que o vetor s caiba em t, nesse
 * caso não tem como continuar procurando. O valor 0 indica que não foi
 * encontrado. O valor 1 indica que foi encontrado.
 *
 * @param t        Vetor que será verificado.
 * @param tamanhoT Tamanho do vetor t.
 * @param s        Vetor que será pesquisado.
 * @param tamanhoS Tamanho do vetor s.
 * @param inicio   Posição de início do vetor t, onde deve iniciar a busca.
 *
 * @return Um int representando o status da busca.
 */
int verificar(char[] t, int tamanhoT, char[] s, int tamanhoS, int inicio) {
    if (inicio + tamanhoS > tamanhoT) {
        return -1;
    }

    for (int i = inicio, j = 0; j < tamanhoS; i++, j++) {
        if (t[i] != s[j]) {
            return 0;
        }
    }

    return 1;
}

 

 

Daí é só ir chamando essa função dentro de um loop, incrementando o valor de inicio.

  • Curtir 1
  • Obrigado 2
Link para o comentário
Compartilhar em outros sites

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...