String_Replace zu langsam! Hat jemand eine Idee?

25/02/2012 - 16:38 von Thomas Mundt | Report spam
In einem sehr großer string > 10 Millionen char sollen Wörter ersetzt
werden.

Das funktioniert auch, nur dauert es verdàchtig lange :-(

Hat jemand eine Idee woran es liegen könnte?

Hier der Code:

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

char string[] = "Sehr_grosser_string_der_<item>und</
item>sehr_oft_ca_30000_mal_enthaelt";


// Copy the string in a new bigger string
char *new_string;
new_string = (char*) malloc(50000000 * sizeof(char));

strcpy(new_string,string);

char search[] = "item";
char replace[1000];

char *tempString;
char *searchStart;

int error = 0;
int len = 0;
int cnt = 1;


// Check if substring could be found
searchStart = strstr(new_string, search);
if(searchStart != NULL) {

// Allocate memmory
tempString = (char*) malloc(50000000 * sizeof(char));

if(tempString != NULL) {

// Create a temporary copy of the string
strcpy(tempString, new_string);

// ersten Abschnitt in String setzen
len = searchStart - new_string;
new_string[len] = '\0';

// zweiten Abschnitt anhaengen
sprintf(replace,"item%d",cnt);
strcat(new_string, replace);

// dritten Abschnitt anhaengen
len += strlen(search);
strcat(new_string, (char*)tempString+len);

while (searchStart != NULL) {

searchStart = strstr((char*)new_string+len, search);

if (searchStart != NULL) {

// temporaere Kopie anlegen
strcpy(tempString, new_string);

len = searchStart - new_string;
new_string[len] = '\0';


cnt++;

sprintf(replace,"item%d",cnt);
//puts(replace);
strcat(new_string, replace);

len += strlen(search);
strcat(new_string, (char*)tempString+len);

}

}

}
else {
puts("ERROR: The memory could not be alocated!");
}

}
else {
puts("ERROR: The substring could not be found!");
}


// Free the memory
free(tempString);
free(new_string);
 

Lesen sie die antworten

#1 uz
25/02/2012 - 18:41 | Warnen spam
Thomas Mundt wrote:
In einem sehr großer string > 10 Millionen char sollen Wörter ersetzt
werden.

Das funktioniert auch, nur dauert es verdàchtig lange :-(

Hat jemand eine Idee woran es liegen könnte?



Für Deine Hausaufgaben bin ich zu faul, aber ich kann Dir folgenden
Artikel empfehlen:

http://german.joelonsoftware.com/Ar...asics.html

Gruß


Uz


Ullrich von Bassewitz
18:39:32 up 31 days, 7:46, 3 users, load average: 0.65, 0.72, 0.77

Ähnliche fragen