Replace em C/C++

Publicado: 18/11/2004 em IntoSpaces
Olá Pessoal!!
Ontem foi um dia terrível por causa de um suposto trabalho que pessaram para eu fazer.
Era para ser resolvido um pequeno problema em C.
O problema éra mais ou menos o seguinte:
Ler um arquivo de texto e onde econtrar os seguintes caracteres "!?." quebrar a linha do texto.
A princípio pensei que fosse fácil, mas quando me dei conta que estava no ambiente não gerenciado e não OO e sem .NET Framework Class Library quase entrei em desespero. hehehe
Depois de muita luta, cheguei a uma solução, não a mais adequada, nem a indicada, mas de certa forma consegui quebrar a linha e apresentar o texto na tela como o professor queria, vejam…

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

void

Replace(char *str, char *old, char New)
{
   char c;
   for(int i = 0; i < strlen(str);i++)
   {
      for(int ii = 0; ii < strlen(old);ii++)
      {
         if(str[i] == old[ii])
         {
            c = New;
            ii = strlen(old);
          }
          
else
             c = str[i];
        }
        printf("%c",c);
    }
} 

void main()
{
   FILE *file;
   char line[255];
   if((file=fopen("texto.txt","r")) != NULL)
   {
       while(fgets(line,255,file) != NULL)
       {
          Replace(line,"!?.",’n’);
        }
        fclose(file);
     }
     else
        puts("Erro ao abrir arquivo");

     getchar();
} Depois desta experiência cheguei à conclusão que C/C++ é coisa pra Macho mesmo eheheh
A manipulação de strings e afins é um tanto quanto complicada, pelo menos aos olhos de inciantes como eu. A parte boa e que complica um pouco até pegar o jeito é que o C é muito explícito, diferente do que estamos acostumados em linguagens de Alto nível, que escondem e mascaram os procedimentos ao máximo para tentar proteger os desenvolvedores deles mesmos.

Do pessoal que lê o blog alguém tem alguma sugestão? Eu tente fazer uma função genérica, porém sei que ela não é muito rápida quando se tratar de grandes textos, e outra ficou um pouco complicado fazer com que ela retornasse um *char, isso facilitaria muito as coisas.

É isso aí pessoal, ralei até, mas vi que gosto desso e vou ralar mais, até entender bem como tudo isso funciona, é apaixonante!

Grande abraço
Shinji

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s