Avatar billede spindoktoren Nybegynder
08. juni 2004 - 19:27 Der er 15 kommentarer og
1 løsning

Search-Replace - C++

Jeg ville bare spørge om det var muligt at finde og erstatte et bogstav/ et ord i en ekstern fil i C++...
Avatar billede arne_v Ekspert
08. juni 2004 - 19:28 #1
Ja ved at læse den linie for linie, erstatte og skrive ud igen.
Avatar billede spindoktoren Nybegynder
08. juni 2004 - 19:45 #2
Hvordan?..
Avatar billede spindoktoren Nybegynder
08. juni 2004 - 20:10 #3
Bare et mindre eksempel :)...
Avatar billede arne_v Ekspert
08. juni 2004 - 20:13 #4
Giv mig lige 20 minutter ...
Avatar billede spindoktoren Nybegynder
08. juni 2004 - 20:24 #5
ok... (!)
Avatar billede arne_v Ekspert
08. juni 2004 - 20:31 #6
Her er et C eksempel som også virker i C++:

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

void replace(char *s,char *s1,char *s2)
{
  int i,j;
  char *tmp;
  tmp = (char *)malloc(strlen(s)+1);
  strcpy(tmp,s);
  i = 0;
  j = 0;
  while(i<strlen(tmp)) {
      if(strncmp(tmp+i,s1,strlen(s1))==0) {
        strcpy(s+j,s2);
        i=i+strlen(s1);
        j=j+strlen(s2);
      } else {
        s[j]=tmp[i];
        i++;
        j++;
      }
  }
  s[j] = '\0';
  free(tmp);
  return;
}

int main()
{
  char line[133];
  FILE *fp1,*fp2;
  fp1 = fopen("input.dat", "r");
  fp2 = fopen("output.dat", "w");
  while(!feof(fp1))
  {
      if(fgets(line,sizeof(line),fp1))
      {
          replace(line,"hund","kat");
          fputs(line,fp2);
      }
  }
  fclose(fp1);
  fclose(fp2);
  return 0;
}
Avatar billede arne_v Ekspert
08. juni 2004 - 20:32 #7
Jeg prøver lige at gøre det lidt mere C++'sk

Og I skal selv være opmærksom på max. linie længde !!
Avatar billede arne_v Ekspert
08. juni 2004 - 20:39 #8
#include <cstdlib>
#include <cstring>

#include <fstream>

using namespace std;

void replace(char *s,char *s1,char *s2)
{
  int i,j;
  char *tmp;
  tmp = (char *)malloc(strlen(s)+1);
  strcpy(tmp,s);
  i = 0;
  j = 0;
  while(i<strlen(tmp)) {
      if(strncmp(tmp+i,s1,strlen(s1))==0) {
        strcpy(s+j,s2);
        i=i+strlen(s1);
        j=j+strlen(s2);
      } else {
        s[j]=tmp[i];
        i++;
        j++;
      }
  }
  s[j] = '\0';
  free(tmp);
  return;
}

int main()
{
  FILE *fp1,*fp2;
  ifstream f1("input.dat");
  ofstream f2("output.dat");
  while(!f1.eof())
  {
      char line[133];
      if(f1.getline(line,sizeof(line)))
      {
          replace(line,"hund","kat");
          f2 << line << endl;
      }
  }
  return 0;
}
Avatar billede arne_v Ekspert
08. juni 2004 - 20:39 #9
OK ?
Avatar billede spindoktoren Nybegynder
08. juni 2004 - 20:46 #10
FILE, fp1, fp2 undeclared?...
Avatar billede spindoktoren Nybegynder
08. juni 2004 - 20:52 #11
Er det adr.? eller...
Avatar billede arne_v Ekspert
08. juni 2004 - 20:55 #12
I C++ eksmeplet kan I bare slette linien:

FILE *fp1,*fp2;

det er en rest fra C versionen.
Avatar billede spindoktoren Nybegynder
08. juni 2004 - 21:00 #13
Altså, i teorien brude jeg kunne skrive noget i input.dat som den spytter ud i output.dat, men som hund og kat?
Avatar billede arne_v Ekspert
08. juni 2004 - 21:02 #14
Den erstatter alle forekomster af hund med kat.
Avatar billede spindoktoren Nybegynder
08. juni 2004 - 21:02 #15
ahh .. ! ok .. jeg fandt selv ud af det!! .. Tak .. !!!
Avatar billede spindoktoren Nybegynder
08. juni 2004 - 21:02 #16
Feeed ... ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester