string replace



  • hi,

    ich lese eine Datei mit getline ein und möchte dort ein gefundenes Wort wie z.B: "hallo" mit einem anderen String replacen z.B "hi".

    [cpp]
    if(GetOperaCookie) {
    char szOp[256];
    sprintf(szOp, "%s\\Folder01", folder);
    string zeile4;
    ifstream datei4(szOp);
    while(getline(datei4, zeile4)) {
    zeile4.replace(.......)
    wie replace ich nun Hallo zu Hi?

    }
    }
    [/cpp]

    msg,lo



  • Ich hab mal eine ANSI C Funktion geschrieben, die sogar nach Groß-/Kleinschreibung sucht und dynamisch Speicher reserviert, wenn der benötigt wird.

    char* strreplace(char** str, char* sfind, char* sreplace, bool case_sensitivity)
    {
    	char* retval = (char*)NULL;
    	char* tmpval = (char*)NULL;
    	char* find = (char*)NULL;
    	char* replace = (char*)NULL;
    	unsigned long int pos = 0;
    	unsigned long int len = 0;
    
    	find = (char*)malloc((strlen(sfind)+1) * sizeof(char));
    	strcpy(find, sfind);
    
    	replace = (char*)malloc((strlen(sreplace)+1) * sizeof(char));
    	strcpy(replace, sreplace);
    
    	if(case_sensitivity)
    	{
    		tmpval = (char*)malloc((strlen(*str)+1) * sizeof(char));
    		strcpy(tmpval, *str);
    		strupr(tmpval);
    		strupr(find);
    	}
    
    	retval = (char*)malloc(sizeof(char));
    
    	len = strlen(*str);
    	for (unsigned int i = 0; i < len; i++)
    	{
    		if((!case_sensitivity && strncmp(((*str)+i), find, strlen(find)) == 0)
    				|| (case_sensitivity && strncmp((tmpval+i), find, strlen(find)) == 0))
    		{
    			retval = (char*)realloc((char*)retval, (pos + strlen(replace) + 1) * sizeof(char));
    			memcpy((retval+pos), replace, strlen(replace) * sizeof(char));
    			pos = pos + strlen(replace);
    			i += strlen(find)-1;
    		}
    		else
    		{
    			retval = (char*)realloc((char*)retval, (pos + 1 + 1) * sizeof(char));
    			retval[pos] = *((*str)+i);
    			pos++;
    		}
    	}
    	retval[pos] = '\0';
    
    	if(case_sensitivity)
    		free(tmpval);
    
    	free(find);
    	free(replace);
    	free(*str);
    	*str = retval;
    	return *str;
    }
    

    Gruß
    ~code_pilot

    PS: Gehört aber eigentlich nicht ins WinAPI-Forum!



  • Und wie replace ich damit jetzt genau nen string?

    string gay;
    strreplace(gay, "hallo", "hi", ..?);

    Danke.



  • zeile4.replace(zeile4.find("Hallo", 0), 5, "Hi");
    


  • str schrieb:

    Und wie replace ich damit jetzt genau nen string?

    string gay;
    strreplace(gay, "hallo", "hi", ..?);

    Danke.

    ja

    strreplace(ein_string_der_nicht_schwul_ist, "hallo", "hi", false);
    

Anmelden zum Antworten