Suchen und Ersetzen von Zeichen in String



  • Ich benutze den MS VC 6 Compiler, gibt es da irgendeien Bibliothek für das Suchen und Ersetzen von Zeichen in einem String. Also um nur ein Zeichen gegen ein anderes zu ersetzen
    benutze ich diesen Code:

    lenght = strlen(fix_string);
    	for(i=0; i < lenght; i++){
    		if(fix_string[i] == 'a'){
    			fix_string[i] = 'b';
    		}
    	}
    

    Aber wenn die zu ersetzenden Zeichen länger oder gar von der Länge der zu suchenden Zeichen abweichen wirds schwierig. Kann jemand helfen?



  • Suchen kannst du mit strstr() bzw. strchr(), ersetzen geht direkt nur durch Überschreiben (oder Umkopieren) - aber irgendwo habe ich auch schon ein paar Funktionen gesehen, um Strings umzubauen.

    (PS: Darfst du C++ Methoden verwenden? Da würde ich dir std::string empfehlen)



  • (PS: Darfst du C++ Methoden verwenden? Da würde ich dir std::string empfehlen)

    Yep, darf von mir aus auch C++ sein, mein Proggy ist halt ganz in ansi-c geschrieben, macht das was? Das mit strstr() bzw. strchr() war mir schon bekannt, ich hoffte eigentlich, daß ich mir die Arbeit sparen könnte einen extra code dafür zu schreiben, sondern daß es schon irgendetwas fertiges gibt.
    Hmm vieleicht sollte ich mit strtok iregendwie den string aufteilen und die Teile mit dem Austauschtext dazwischen wieder zusammen fügen, was hälst du davon?



  • Ok hab hier mal einen Code geschrieben der auch funktioniert, aber es gibt doch bestimmt Möglichkeiten den speicherverwaltungstechnisch und mit variabler Stringlänge zu verbessern.

    char *Change_String(char change_string[32000], char char_old[64], char char_new[64]){
    
    	int		lenght_old, lenght_new;
    	int		i=0;
    	char		buffer[32000];
    	char		backup[32000];
    	char		*pch;
    
    	lenght_old = strlen(char_old);
    	lenght_new = strlen(char_new);
    
    	if((lenght_old == lenght_new) && (lenght_new == 1)){
    		for(i=0; i < lenght_change_string; i++){
    			if(change_string[i] == char_old[0]){
    				change_string[i] = char_new[0];
    			}
    		}
    	}else{
    		strcpy(backup, change_string);
    		pch = strtok(backup, char_old);
    		while (pch != NULL){
    			if(i == 0){
    				strcpy(buffer, pch);
    			}else{
    				strcat(buffer, pch);
    			}
    			strcat(buffer, char_new);
    			i++;
    			pch = strtok(NULL, char_old);
    		}
    		buffer[strlen(buffer) - lenght_new] = 0;
    		strcpy(change_string, buffer);
    	}
    	return change_string;
    }
    

    Wo ich jetzt schon weiß, daß das Teil versagt, wäre, wenn man z.B. einen String hat der aus 20000x Char 'a' besteht und das will man durch Zeichenfolge '12345' ersetzen, da kollidiert ganz klar der Speicher, wie kann ich den Code optimieren, gibt doch bestimmt ein paar Profis hier oder?


Log in to reply