Este já é o terceiro programa onde mostro como pesquisar string dentro de um arquivo, nos outros dois programas antes deste eu usei a função strstr();
da biblioteca string.h, más neste, onde considero mais evoluído as comparações são feitas no braço sem funções padrão e o resultado foi muito bom, teste este ótimo código indicado a estudantes em linguagem C.
Veja abaixo imagens do programa em execução:
Veja abaixo o código do programa:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define lin 15
const int TAM = 52;
void Janela5 ( ) {
system ( "title
PESQUISANDO STRING EM ARQUIVO III" );
int l, c;
system ( "Color F0" );
for ( l = 0; l <= 25 ; l++ ) {
for ( c = 0; c <= 80 ; c++ ) {
gotoxy ( c , l );
if ( l == 2 ) {
textbackground ( LIGHTGRAY );
printf ( " " );
}
if ( c == 1 ) {
textbackground ( LIGHTGRAY );
printf ( " " );
}
if ( l == 25 ) {
textbackground ( LIGHTGRAY );
}
if ( c == 80 ) {
textbackground ( LIGHTGRAY );
printf ( " " );
}
}
}
textbackground ( LIGHTGRAY );
}
int continuando ( ) {
int nr;
do {
system ( "cls" );
Janela5 ( );
textbackground ( WHITE );
textcolor ( LIGHTRED );
gotoxy ( 27 , 5 );
printf ( "PESQUISANDO
STRING EM ARQUIVO III" );
textcolor ( BROWN );
gotoxy ( 25 , 7 );
printf ( "Programa
desenvolvido por:" );
textcolor ( BLACK );
gotoxy ( 52 , 7 );
printf ( "Samuel Lima" );
textcolor ( BLUE );
gotoxy ( 34 , 9 );
printf ( "sa_sp10@hotmail.com" );
textcolor ( LIGHTBLUE );
gotoxy ( 24 , 11 );
printf ( "Digite 0 para
sair ou 1 para continuar " );
textcolor ( LIGHTRED );
scanf ( "%d" , &nr );
fflush ( stdin );
fflush ( stdin );
if ( nr == 0 ) {
textcolor ( LIGHTRED );
gotoxy ( 36 , 18 );
printf ( "MUITO
OBRIGADO" );
getche ( );
exit ( 0 );
} else if ( nr == 1 ) {
return 1;
}
textcolor ( YELLOW );
gotoxy ( 36 , 16 );
printf ( "\aopcão errada!" );
getche ( );
} while ( 1 );
return 1;
}
int Pesq_Str ( char **str , char busca [ 20 ] ) {
int cop = 0, i, j, k;
system ( "cls" );
Janela5 ( );
textcolor ( LIGHTRED );
gotoxy ( 25 , 3 );
printf ( "PESQUISANDO
STRING EM ARQUIVO III" );
textcolor ( LIGHTBLUE );
gotoxy ( 25 , 5 );
printf ( "Digite uma
string para pesquisar : " );
textcolor ( LIGHTRED );
gotoxy ( 62 , 5 );
scanf ( "%20[^\n]s" , busca );
fflush ( stdin );
for ( i = 0; i < lin ; i++ ) {
for ( j = 0; j < TAM ; j++ ) {
k = 0;
while ( str [ i ] [ j + k ] == busca [ k ] && busca [ k ] != '\0'
&& str [ i ] [ j + k ] != '\0' ) {
k++;
if ( busca [ k ] == '\0' ) {
gotoxy ( 15 , cop + 7 );
textcolor ( LIGHTBLUE );
printf ( "A string " );
textcolor ( LIGHTRED );
printf ( "%s" , busca );
textcolor ( LIGHTBLUE );
printf ( " foi
encontrada na linha " );
textcolor ( LIGHTRED );
printf ( "%d" , i );
textcolor ( LIGHTBLUE );
printf ( " e coluna " );
textcolor ( LIGHTRED );
printf ( "%d " , j );
getche ( );
cop++;
}
}
}
}
return ( cop );
}
int main ( ) {
continuando ( );
FILE *arq;
char **str;
char busca [ 20 ] = { '\0' };
unsigned int i = 0, n;
arq = fopen ( "Arquivo.bin" , "rb" );
str = ( char** ) malloc ( TAM * sizeof(char*) );
if ( arq != NULL ) {
while ( feof ( arq ) == 0 ) {
str [ i ] = ( char* ) malloc ( TAM * sizeof(char) );
fgets ( str [ i ] , TAM , arq );
i++;
}
fclose ( arq );
} else {
textcolor ( YELLOW );
gotoxy ( 24 , 12 );
printf ( "Não foi possível
abrir o arquivo." );
getche ( );
exit ( 0 );
}
system ( "cls" );
Janela5 ( );
textcolor ( LIGHTRED );
gotoxy ( 26 , 3 );
printf ( "PESQUISANDO
STRING EM ARQUIVO III" );
textcolor ( LIGHTBLUE );
gotoxy ( 21 , 5 );
printf ( "Veja abaixo a
leitura do arquivo de texto" );
for ( i = 0; i < lin ; i++ ) {
gotoxy ( 23 , i + 7 );
textcolor ( BLACK );
printf ( " %s " , str [ i ] );
}
Sleep ( 1000 );
textcolor ( LIGHTRED );
gotoxy ( 30 , 23 );
printf ( "PRESSIONE QUALQUER TECLA" );
getche ( );
n = Pesq_Str ( str , busca );
textcolor ( LIGHTBLUE );
gotoxy ( 24 , 14 );
printf ( "A string" );
textcolor ( LIGHTRED );
printf ( " %s" , busca );
textcolor ( LIGHTBLUE );
printf ( " ocorre " );
textcolor ( LIGHTRED );
printf ( "%d" , n );
textcolor ( LIGHTBLUE );
printf ( " vêzes" );
if ( n == 0 ) {
textcolor ( LIGHTBLUE );
gotoxy ( 24 , 16 );
printf ( "Esta palavra
não existe na matriz " );
Sleep ( 1000 );
textcolor ( LIGHTRED );
gotoxy ( 30 , 23 );
printf ( "PRESSIONE QUALQUER TECLA" );
getche ( );
main ( );
}
if ( n >= 1 && n <= 15 ) {
textcolor ( LIGHTBLUE );
gotoxy ( 24 , 16 );
printf ( "Esta palavra
existe na matriz " );
Sleep ( 1000 );
textcolor ( LIGHTRED );
gotoxy ( 30 , 23 );
printf ( "PRESSIONE QUALQUER TECLA" );
getche ( );
main ( );
}
getche ( );
return ( 0 );
}