Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

cutinho

vetor

Recommended Posts

Boa tarde gente.

Estou com problemas para resolver um problema em c estudei igual um louco, perdi noite mas fui mal na prova agora é com vetor

O problema é o seguinte;

Escrever um programa c para ler uma serie de strings e colocá-los no vetor chamado texto com capacidade para 500 caracteres. Uma string vazia indicará final dos dados.Imprimir o vetor texto.Usando o vetor texto, determinar as palavras com mais de 4 letras.

 

Eu sei que é necessário, me corrigam se eu tiver errado:

texto[501]; pois o ultimo é o \0.

strlen para contar o tamanho e selecionar as de 4 letras.

um contador "i"

 

Eu tentei mas não deu certo ficou assim:

 

#include <stdio.h>
#include <stdlib.h>
 
int main(){
    char texto[501];
    char i;
    printf("digite uma serie de string\n");
    gets(texto);
    for(i=0;i<texto;i++)
        scanf("%c",texto[i]);
    return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!

 

Você está confundindo as coisas: gets e scanf são duas funções diferentes com propósitos similares. Ambas servem para ler entrada.

 

Não recomendo que use nenhuma das duas. Pesquise sobre fgets e pode perguntar que te ajudamos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu refiz ficou mas da erro no fim:

 

#include <stdio.h>
#include <stdlib.h>
 
main(){
  char str[20];
  char texto[501];
int i=0, n;
printf("digite a string\n");
gets(str);
while(str!="\0"){
strcat(texto,str);
strcat(texto," ");
printf("Digite outra string\n");
gets(str);
n=0;
for(;texto[i];!=" ";i++)
n=1+n;
if(n>4){
strcat(texto4,texto);
strcat(texto4," ");
}
i++
}
getche();
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Considerações:

- a princípio, o tipo de retorno de main deve ser explicitado (não lembro se no padrão mencionava que poderia ser inferido. Gui?)

- não use gets. Pesquise sobre buffer overflow.

 

E que erro dá no final? Nem sempre o pessoal tem compilador disponível.

Compartilhar este post


Link para o post
Compartilhar em outros sites
#include <ctype.h>
#include <string.h>
#define MAXLETRAS 4

int getWordsFrom (char *str)
{
    int numWords = 0; /*contador do numero de palavras*/
    int numLet; /*contador do numero de letras */

    int i;
    for (i = 0; i < (signed int)strlen(str); i++) /* de 0 até o tamanho da string, ok */
    {
        if (isspace (str[i])) /* se for um caractere de espaço... */
        {
            if (numLet == MAXLETRAS) /* compara se antes dele foram contadas 4 letras */
                numWords++; /* se sim, +1 no numero de palavras */
            numLet = 0;  /* e o número de letras contadas volta a 0 */

        } else numLet++; /* se não for um caractere de espaço, conta +1 caracter */
    }
    return numWords; /* e... retorna o numero de palavras com 4 letras */
}

 

Exemplo:

int main (void)
{
    char *string = {"meu galo bota ovo"}; // <--- 2 palavras com 4 letras.
    printf("Numero de Palavras com 4 letras: %i\n", getWordsFrom(string));
    return 0;
}

Agora faz a parte de ler a string.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isis, a partir de C99, (int) não é mais o tipo implícito. Continua sendo "legal" declarar main dessa forma, mas assume-se que o ambiente de destino do programa tem a particularidade de aceitar esta forma (que não é necessária para uma implementação em conformidade com o padrão). Refiro-me a este trecho:

 

 

.1.2.2.1 Program startup
The function called at program startup is named main. The implementation declares no prototype for this function. It shall be defined with a return type of int and with no parameters:
int main(void) { /* ... */ }
or with two parameters (referred to here as argc and argv, though any names may be used, as they are local to the function in which they are declared):
int main(int argc, char *argv[]) { /* ... */ }
or equivalent;10) or in some other implementation-defined manner.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tentando simplificar conseguir fazer este codigo, ele executa só que imprime o numero total de letras não le palavras e não separadas tentei criar condição para entrar no while(já que são varias strings), as condições que tentei foi achar o '\0' ou '\0' mas não foi isis orientou a não usar o gets, mas é que o professor só quer com ele.#include#include#include main(){ char texto[501]; char str[501]; printf(" Digite uma string:\n"); gets(str); strcat(texto,str); printf(" a string %s possui %d",str,strlen(texto)); getche(); }

 

#include#include#include main(){ char texto[501]; char str[501]; printf(" Digite uma string:\n"); gets(str); strcat(texto,str); printf(" a string %s possui %d",str,strlen(texto)); getche(); }

 

#include

#include

#include

main(){

char texto[501];

char str[501];

printf(" Digite uma string:\n");

gets(str);

strcat(texto,str);

printf(" a string %s possui %d",str,strlen(texto));

getche();

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sinceramente, o seu professor disse que ele quer um programa usando a função "gets" ou é preguiça de tentar entender o funcionamento de "fgets"? Eu nunca vi um professor obrigando a utilizar uma função única de entrada, o importante é o código funcionar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

não, é que ele viu que eu estou com dificuldades ele orientou a fazer o mais simples possivel, eu já tentei com fgets mas não vai de jeito nenhum com o código descrito chega a imprimir e contar, só que tudo, como eu disse a condição de contar letra por letra da palavra e que não consigo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas... você vai se limitar somente ao que lhe ensinam? Normalmente ensinam com gets e dane-se o aluno (eu também aprendi assim, até levar uma bronca da Isis). Enfim, a questão de contar as letras está na função que postei acima:

 

numLet é uma variável para contar a quantidade de letras. Se o caracter lido não for um espaço, esta variável será incrementada. Do contrário, ela tem seu valor voltado a 0 (para iniciar uma nova contagem). Sempre que encontrar um caracter de espaço, será verificado se a variável numLet está com valor 4. Se sim, a variável numWords é incrementada, foi encontrada uma palavra com 4 letras. Testei aqui e funcionou:

 

image.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

Minha sugestão é usar strtok. Fiz também exemplificando o uso de fgets:

// Compilação: gcc -Wall -Wextra -pedantic -std=c99 blah.c -o blah

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

int main(void)
{
    char text[501];

    puts("Insira o texto.");

    if (!fgets(text, sizeof text, stdin))
    {
        fputs("\n\tAlgo deu errado.", stderr);
        exit(EXIT_FAILURE);
    }

    text[strcspn(text, "\r\n")] = '\0';
    printf("\n\tVetor lido: \"%s\"\n\n", text);

    size_t long_words = 0;

    for (char *word = strtok(text, " "); word; word = strtok(NULL, " "))
    {
        if (strlen(word) > 4)
        {
            long_words++;
        }
    }

    printf("\n\tForam digitadas %zu palavras com mais de 4 letras.\n\n", long_words);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.