Enviado em 26/05/2015 - 16:35h
Olá, pessoal alguém ai entende desse assunto Obrigado.
Enviado em 26/05/2015 - 16:35h
Enviado em 26/05/2015 - 17:15h
Enviado em 26/05/2015 - 18:09h
Enviado em 26/05/2015 - 18:23h
Enviado em 26/05/2015 - 19:11h
Enviado em 26/05/2015 - 22:18h
$ read -n 5 STRING; grep $STRING arquivo.txt
The generation of random numbers is too important to be left to chance.
Enviado em 27/05/2015 - 00:05h
Enviado em 27/05/2015 - 07:37h
Enviado em 27/05/2015 - 09:44h
É interessante também olhar a strcasestr(), que desconsidera o case das letras (não diferencia maiúsculas de minúsculas). Está no mesmo manual da strstr().
rewind: http://linux.die.net/man/3/fseek
strncmp: http://linux.die.net/man/3/strncmp
strstr: http://linux.die.net/man/3/strstr
O código:
viva o linux
slackware e o melhor
patrick volkerding
linus torvalds
Jackson_Veiga
Espero ter ajudado,
/* vol_forum/file.c
*
* Autor : Jackson_Veiga (VoL)
* Modificado por: Enzo Ferber
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* É boa prática declarar tamanhos de vetores como MACROS, assim, fica fácil
* alterar seus tamanhos caso você mude de idéia mais tarde.
*/
#define BUFFER 50
int main (void)
{
/* EDIT 1:
* Declarar todas as variáveis no inicio do escopo da função por
* motivos de clareza
*/
FILE *Input;
long tamanho;
char string1[BUFFER];
char string2[BUFFER];
char *s; /* s será o retorno de strstr() */
register int i;
if (!(Input = fopen("arq.txt","r"))) {
fputs ("\n\nErroa o abrir o arquivo\n\n",stderr);
//sai em caso de falha
exit (1);
}
fseek (Input ,0 , SEEK_END);
tamanho = ftell (Input);
// teste
printf("Quantidade de Caracteres= %ld\n",tamanho);
printf("Informe os caracteres a serem procurados: ");
fgets(string1, BUFFER, stdin);
/* O ultimo caractere no buffer string1 será '\n', trocamos por 0x0 */
string1 [strlen(string1) - 1] = 0x0;
printf("Caracteres Procurados: %s\n ",string1 );
/* EDIT 2:
* voltar o ponteiro do descritor do arquivo para o início do
* arquivo.
*/
rewind (Input);
printf("\n\nLeitura do arquivo\n");
// lê cada palavra do texto
while(!feof(Input)) {
/* EDIT 3:
* fgets() fora do outro while(), assim, ele lê a linha
* inteira, e te mostra o que foi lido. A comparação é feita
* depois.
*/
fgets(string2, BUFFER, Input);
printf("Valor lido: %s",string2);
/* EDIT 4:
* Você pode encontrar uma substring de duas formas:
* um loop for() e usar strncmp() ou utilizar a função
* strstr();
*/
/* EDIT 5:
* Antes, comparamos os tamanhos da string procurada (string1)
* com o tamanho da string lida (string2). Caso o tamanho da
* string 1 seja MAIOR QUE a string2, significa que ela
* não pode ser uma substring, então pulamos para a
* próxima leitura.
*/
if (strlen(string1) > strlen(string2)) continue;
/* MÉTODO 1: for() + strncmp()
*
* int strncmp(str1, str2, n)
* strncmp() irá comparar os 'n' primeiros bytes de str1 com
* os 'n' primeiros bytes de str2. No nosso caso, queremos
* comparar todos os bytes de str2, então utilizaremos a
* função strlen(str2) como argumento 'n'.
*/
for (i = 0; i < strlen(string2); i++) {
if (!strncmp(&string2[i], string1, strlen(string1) - 1 )) {
printf("Metodo STRCMP\n");
printf("Encontrado na linha: %s\n", string2);
printf("Posicao : %d\n\n", i);
}
}
/* MÉTODO 2: strstr()
* char *strstr(str1, str2)
*
* A função strstr() retorna um ponteiro para o início da
* ocorrência de str2 em str1 em caso de sucesso e um NULL
* em caso de falha.
*
* Esse método é bem mais facil de ser entendido.
*/
if ( (s = strstr(string2, string1)) ) {
printf("Metodo STRSTR\n");
printf("s: %s\n", s);
printf("Encontrado na posicao: %d\n", (int)(s - string2));
}
}
/* EDIT 6:
* É boa prática retornar um valor ao final de main(). Assim o programa
* informa que tudo terminou OK.
*/
return 0;
}
The generation of random numbers is too important to be left to chance.
Enviado em 27/05/2015 - 14:56h
Enviado em 27/05/2015 - 15:26h
Enviado em 27/05/2015 - 15:33h
The generation of random numbers is too important to be left to chance.
Entre na sua conta para responder.