quinta-feira, 30 de junho de 2016

Substituindo caracteres em matriz

Agora eu mostro um exemplo prático de como substituir caracteres dentro de uma matriz de char.
O código foi criado no eclipse como todos os outros, porque é minha IDE padrão, e por aqui,
não mostrou nenhum warnings.
O código é indicado a iniciantes em C, que deve usá-lo como fonte de estudos.

Veja abaixo imagens do programa em execução:









Veja abaixo o código do programa:



#include <stdio.h>
#include <string.h>
#include <conio.h>
void got_color ( int tam_lin_ini, int tam_lin_fim, int tam_ini_col,
         int tam_fim_col, int a, int b ) {
     int i, c;
     if ( a >= 1 && a <= 16 ) {
         textcolor ( a );
     }
     if ( b >= 1 && b <= 16 ) {
         textbackground ( b );
     }
     for ( i = tam_lin_ini; i < tam_lin_fim; i++ ) {
         for ( c = tam_ini_col; c < tam_fim_col; c++ ) {
              gotoxy ( c, i );
              printf ( " " );
         }
     }
}
int Saida ( int n ) {
     if ( n == -1 ) {
         textcolor ( LIGHTBLUE );
         gotoxy ( 22, 30 );
         printf ( "Por: " );
         textcolor ( LIGHTMAGENTA );
         printf ( "Samuel Lima" );
         textcolor ( BLACK );
         gotoxy ( 22, 31 );
         printf ( "sa_sp10@hotmail.com" );
         Sleep ( 1800 );
         textcolor ( LIGHTRED );
         gotoxy ( 37, 32 );
         printf ( "MUITO OBRIGADO" );
         getche ( );
         exit ( 0 );
     }
     return 0;
}
int main ( ) {
     system ( "title SUBSTITUINDO CARACTERES EM MATRIZ" );
     system ( "Color A7" );
     got_color ( 2, 34, 3, 79, 2, 0 );
      char string [ 20 ] [ 43 ] = {
                   "Q O B G C O H O P P N A Y G B D F R H O",
                   "O C V W M L W A U P W G K I S J G A U A",
                   "O I I J V I P I D F Q N I O K Z Z Z Y C",
                   "T T W S S C P A X B L I G S O R V I O A",
                   "N S O J E A M B I N D T H T Y H F L O E",
                   "G I H T J B M K J Z I A A G O K I A M T",
                   "R L T P N W T Q Y F Y C O T Z W S B H E",
                   "X A V C L E R G V W C H N G A J J A I C",
                   "A B Z S L F M I K T H E I V O U K G L A",
                   "Z A J I Z E A A R I M S A R K P N D F C",
                   "R C Y B L B T W H A N A E E H C Z N L L",
                   "R J N E D A V N H N L D J N X Z A F E B",
                   "C D A U C C N L E O I V X J Q T S F H I",
                   "L A T G L O U A R C J P O E V J U V O X",
                   "M O J I Q B L A B M A W S U D W G R F D",
                   "R Y D H R R C O C Q L J R E G A E D V F",
                   "E T K O I R K L G H A K D J B J B T T B",
                   "E V B C A H V B A O W D C A I A Z A Z J",
                   "O A N B Y C U V G C A C O S Q S W I L N",
                   "Y R X U J C V S T X B G K Y W J B M G I"};
     char ch1 [ 3 ];
     char ch2 [ 3 ];
     int i, j, n;
     do {
         textcolor ( LIGHTRED );
         gotoxy ( 25, 3 );
         printf ( "SUBSTITUINDO CARACTERES EM MATRIZ " );
         textcolor ( LIGHTBLUE );
         gotoxy ( 24, 5 );
         printf ( "Escolha um caracter para substituir " );
         textcolor ( WHITE );
         for ( i = 0; i < 20; i++ ) {
              gotoxy ( 22, i + 7 );
              for ( j = 0; j < 43; j++ ) {
                   printf ( "%1c", string [ i ] [ j ] );
              }
         }
         textcolor ( LIGHTBLUE );
         gotoxy ( 22, 28 );
         printf ( "Para sair digite " );
         textcolor ( LIGHTRED );
         printf ( "[ - 1 ] " );
         gets ( ch1 );
         fflush ( stdin );
         strupr ( ch1 );
         n = atoi ( ch1 );
         if ( n == -1 ) {
              Saida ( n );
         }
         gotoxy ( 47, 28 );
         clreol ( );
         textcolor ( LIGHTBLUE );
         gotoxy ( 24, 5 );
         printf ( "Escolha um caracter para substituição" );
         textcolor ( LIGHTBLUE );
         gotoxy ( 22, 28 );
         printf ( "Para sair digite " );
         textcolor ( LIGHTRED );
         printf ( "[ - 1 ] " );
         gets ( ch2 );
         fflush ( stdin );
         strupr ( ch2 );
         n = atoi ( ch2 );
         if ( n == -1 ) {
              Saida ( n );
         }
         for ( i = 0; i < 20; i++ ) {
              gotoxy ( 22, i + 7 );
              for ( j = 0; j < 43; j++ ) {
                   if ( string [ i ] [ j ] == *ch1 ) {
                        string [ i ] [ j ] = *ch2;
                   }
              }
         }
         textcolor ( LIGHTBLUE );
         for ( i = 0; i < 20; i++ ) {
              gotoxy ( 22, i + 7 );
              for ( j = 0; j < 43; j++ ) {
                   if ( string [ i ] [ j ] == *ch2 ) {
                        textcolor ( LIGHTRED );
                        printf ( "%1c", string [ i ] [ j ] );
                   } else {
                        textcolor ( WHITE );
                        printf ( "%1c", string [ i ] [ j ] );
                   }
              }
         }
         getche ( );
         gotoxy ( 24, 5 );
         clreol ( );
         gotoxy ( 47, 28 );
         clreol ( );
     } while ( 1 );
     return 0;
}