cutinho 0 Denunciar post Postado Agosto 12, 2013 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
guidjos 65 Denunciar post Postado Agosto 13, 2013 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
cutinho 0 Denunciar post Postado Agosto 13, 2013 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
_Isis_ 202 Denunciar post Postado Agosto 13, 2013 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
reebr 94 Denunciar post Postado Agosto 14, 2013 #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
guidjos 65 Denunciar post Postado Agosto 14, 2013 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
cutinho 0 Denunciar post Postado Agosto 14, 2013 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
reebr 94 Denunciar post Postado Agosto 14, 2013 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
cutinho 0 Denunciar post Postado Agosto 14, 2013 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
reebr 94 Denunciar post Postado Agosto 15, 2013 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: Compartilhar este post Link para o post Compartilhar em outros sites
guidjos 65 Denunciar post Postado Agosto 16, 2013 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