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++...
Annonceindlæg fra Bazoom
Få styr på gamer computerens hardware
I gaming-verdenen kan det rigtige hardware være forskellen mellem en uforglemmelig spiloplevelse og konstant frustration. Her er hvad du bør overveje.
22. juli 2024
Ja ved at læse den linie for linie, erstatte og skrive ud igen.
Bare et mindre eksempel :)...
Giv mig lige 20 minutter ...
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; }
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 !!
#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; }
08. juni 2004 - 20:46
#10
FILE, fp1, fp2 undeclared?...
08. juni 2004 - 20:52
#11
Er det adr.? eller...
08. juni 2004 - 20:55
#12
I C++ eksmeplet kan I bare slette linien: FILE *fp1,*fp2; det er en rest fra C versionen.
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?
08. juni 2004 - 21:02
#14
Den erstatter alle forekomster af hund med kat.
08. juni 2004 - 21:02
#15
ahh .. ! ok .. jeg fandt selv ud af det!! .. Tak .. !!!
08. juni 2004 - 21:02
#16
Feeed ... ;)
Kurser inden for grundlæggende programmering