Zeichen löschen in einem String



  • Hallo ich möchte bestimmte Zeichen löschen in einem String bestimmte Zeichen dienen als Seperationszeichen und dürfen von dem User nicht benutzt werden. Habe nun eine Fkt geschrieben die dies tut könnt ihr mal drüber gugn bzw Tipps geben für Optimierung welche der beiden Funktionen ist performanter ?

    string& deleteCharacter(string &s, char del) {
    	if( s.empty() )
    		return s;
    
    	string::iterator i , j;
    	i = j = s.begin();
    
    	for( i,j ; i != s.end() ; i++ ) {
    		if( *i == del ) { 
    			continue;
    		}
    		*j = *i;
    		j++;
    	}
    	*j = 0;
    	s = s.c_str();
    
    	return s;
    }
    
    string& deleteChar(string &s, char del) {
    	if( s.empty() )
    		return s;
    
    	char *tmp = new char[s.size()+1];
    	strcpy(tmp,s.c_str());
    	unsigned int i, j;
    
    	for( i = 0, j = 0 ; tmp[i] != 0 ; i++ ) {
    		if( tmp[i] != del ) {
    			tmp[j++] = tmp[i];
    		}
    	}
    	tmp[j] = 0;
    	s = tmp;
    	return s;
    }
    


  • string& deleteCharacter(string &s, char del) {
    	if( s.empty() )
    		return s;
    
    	string::iterator i , j;
    	i = j = s.begin();
    
    	for( i,j ; i != s.end() ; i++ ) {
    		if( *i != del ) { 
    			*j++ = *i;
    		}
    	}
    
    	*j = 0;
    	s = s.c_str();
    	return s;
    }
    

    die erste durch das hier ersetzen



  • std::remove_if und std::erase/string::resize ist wahrscheinlich ein eck schneller.



  • std::string str = "kdhsgjksdgnksdkgjsdkgjnsdkögjnda<köfgjnargh<dfjklgvbipuw4t<hib";
    char c = 's';
    str.erase(std::remove(str.begin(), str.end(), c), str.end());
    

    edit: zu langsam 😞


Anmelden zum Antworten