Ir ao conteúdo

C Dificuldade com strings em C


Ir à solução Resolvido por devair1010,

Posts recomendados

Postado

Olá, sou novo na área da programação e me surgiu o seguinte problema.

Leia um texto e uma palavra(usuário entra) e veja quantas vezes essa palavra repete no texto e informe esse resultado.

 

fiz o seguinte código(não funcional) e gostaria de saber aonde estou errando. Obrigado pela atenção desde já.

 

#include <stdio.h>
#include <string.h>
int main()
{
    char texto[300], palavra[25];
    char teste[25];
    int i, j,k, result, contador = 0;
    int tamanho;
    printf("Digite o texto: ");
    gets(texto);
    printf("Digite a palavra(sem espaços): ");
    scanf("%s", &palavra);

    printf("\nO texto digitado foi: %s\n", texto);
    printf("\nA palavra Digitada foi: %s\n", palavra);
    tamanho = strlen(texto);
    texto[tamanho]='\0';
    for(i=0; i<tamanho; i++)
    {
        k=i;
        while(texto!= ' ')
        {
            j=0;
            teste[j]=texto;
            i++;
            j++;
        }
        teste='\0';
        result = strcmp(palavra, teste);
        if(result == 0)
        {
            contador = contador + 1;
        }
        teste[0]='\0';
        i = k;
    }
    printf("A quantidade de vezes que a palavra repetiu foi:%d", contador);
}
 

  • Obrigado 1
Postado

@Artur Simon Olá!

Aqui está!

    for(i= 0; i < tamanho; i++){
        /* i= k;  < declaração sem sentido */
        j= 0; /*# índice de cópia iniciado fora do laço de cópia */
        while(texto[i] != ' ' && i < tamanho){
            teste[j]= texto[i];
            i++;
            j++;
        }
        teste[j]= '\0';
        result= strcmp(palavra, teste);
        if(result == 0){
            ++contador;
        }
        /* i= k;  < declaração sem sentido   */
    }

 

Algo mais?

 

  • Curtir 2
  • Solução
Postado

@Artur Simon      para postar seu código é melhor usar o botão   <>   que está lá na barra de ferramentas da janela de postar , pois senão seu código fica faltando alguns caracteres como os  [ i ]  que sumiram do seu código ,  e seu código está bom , apenas você colocou o j=0 dentro do while , assim a palavra teste ficará apenas com um caractere e na posição zero e na hora de comparar ele compara errado ,  então seu código modificado ficaria assim  :

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <windows.h>
/*             0     1    2     3   4      5      6      7         8  */
typedef enum{BLACK,BLUE,GREEN,CYAN,RED,MAGENTA,BROWN,LIGHTGRAY,DARKGRAY,   /* nome das cores */
LIGHTBLUE,LIGHTGREEN,LIGHTCYAN,LIGHTRED,LIGHTMAGENTA,YELLOW,WHITE} COLORS;
/*  9         10         11        12        13         14    15 */

static int __BACKGROUND = 1/*BLACK*/;/*pode ser o numero ou o nome da cor*/
static int __FOREGROUND = LIGHTGRAY;

void textcolor (int letras, int fundo){/*para mudar a cor de fundo mude o background*/
    __FOREGROUND = letras;
    __BACKGROUND = fundo;
    SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),
    letras + (__BACKGROUND << 4));
}
int som(int f){
    Beep(f,150);/* primeiro a frquência depois o tempo de duração do som */
    return 0;
}
int main(){
    char texto[300], palavra[25];
    char teste[25];
    int i,j,k,result,contador = 0;
    int tamanho;
    textcolor(14,0);
    printf("Digite o texto ---------------------: ");
    fflush(stdin);
    textcolor(11,0);
    gets(texto);
    textcolor(14,0);
    printf("Digite a palavra  ( sem espaços ) --: ");
    fflush(stdin);
    textcolor(11,0);
    scanf("%s",palavra);
    textcolor(10,0);
    printf("\nO Texto Digitado Foi: --------------: %s\n",texto  );
    printf("\nA Palavra Digitada Foi -------------: %s\n",palavra);
    tamanho = strlen(texto );
    for(i=0; i<tamanho; i++){
        j=0;
        while(texto[i]!=' ' && texto[i]!='\0'){
            teste[j]=texto[i];
            i++;
            j++;
        }
        teste[j]='\0';
        if(strcmp(palavra,teste)==0)contador++;
    }
    textcolor(14,0);
    printf("\nA Quantidade De Vezes Que A Palavra Saiu Foi -> %d Vezes\n\n",contador);
    Sleep(1000);
    printf("       Tecle\n\n");
    Sleep(300);
    som(800);
    getch();
    return 0;
}

 

  • Curtir 2
Postado
2 horas atrás, AnsiC disse:

@Artur Simon Olá!

Aqui está!


    for(i= 0; i < tamanho; i++){
        /* i= k;  < declaração sem sentido */
        j= 0; /*# índice de cópia iniciado fora do laço de cópia */
        while(texto[i] != ' ' && i < tamanho){
            teste[j]= texto[i];
            i++;
            j++;
        }
        teste[j]= '\0';
        result= strcmp(palavra, teste);
        if(result == 0){
            ++contador;
        }
        /* i= k;  < declaração sem sentido   */
    }

 

Algo mais?

 

Cheguei a resposta desejada, muito obrigado pela ajuda. 

adicionado 12 minutos depois

Obrigado pela explicação e principalmente pelo tempo dedicado.

Cheguei nas respostas e no entendimento pretendidos inicialmente.

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

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!