String in Klein-/Großbuchstaben wandeln - eigene Methode



  • | ist bitweises Oder, |= ist bitweises Oder mit Zuweisung, analog zu +/+= usw.



  • thanx'! Da tun' sich ja unheimlich viele neue Möglichkeiten auf
    *scharr-mit-den-Hufen*
    sorry, wenn ich immer solche dau-like Fragen stelle, aber bin halt noch neu im Geschäft.



  • ...und weiter geht es:

    int len = 256;
    char row[256]={"HALLO, DAS IST EIn TExT;;** MIT VERScHIEDENEN zEICHEn@\0"};
    //mit bitweisem ODER:
    const int LOW_DIFF = 32;//==0x20=='a'-'A'
    char * src = row;
    while(len--) { 
      *src++ |= LOW_DIFF; 
    }
    cout<<row<<endl;
    

    1st question: wie unterdrücke/kriege ich den Datenschrott, den ich nach der Umwandlung in meinem string habe weg?
    2nd question: der Code verändert aber auch alle anderen Zeichen und nicht nur die Großbuchstaben
    die ganzen Probleme hätte ich aber doch mit diesem Code nicht:

    for(int i=0; i<len ;i++){
        row[i]=tolower(row[i]); 
    }
    

    oder diesem:

    for(int i=0; i<len ;i++){
      if( row[i]>='A' && row[i]<='Z' ){
        row[i] += 32;
        ///*oder:*/row[i] = (int)row[i]+32;  //32==0x20=='a'-'A'    
      } 
    }
    

    warte auf Kritik... 😃 aber bitte nicht schlagen



  • sorry, habe gerade gesehen, daß tolower() nicht benutzt werden darf;-(



  • zu 1st question: Was ist denn für dich Datenschrott?
    zu 2nd question: korrekt



  • groovemaster2002 schrieb:

    zu 1st question: Was ist denn für dich Datenschrott?

    Das was hinter dem Stringendezeichen steht, welches leider durch ein Leerzeichen ersetzt wurde und somit kein Endezeichen mehr ist. Mit len = strlen(row) sollte sich das erübrigen.



  • nun ja, schau es dir doch mal an: wenn row mit zB cout auf Konsole ausegegeben wird, dann werden am Ende bei dem ersten Code-Bsp noch irgend welche anderen Zeichen (von mir als 'Schrott' bezeichnet) ausgegeben, obwohl row '\0' terminiert ist.



  • @Bashar: year, that's it! thanx'
    aber zweiteres bleibt (keine Einschränkung auf Großbuchstaben beim Verändern)



  • Bashar schrieb:

    Das was hinter dem Stringendezeichen steht, welches leider durch ein Leerzeichen ersetzt wurde und somit kein Endezeichen mehr ist. Mit len = strlen(row) sollte sich das erübrigen.

    Man sollte sich die Codes halt doch 2x durch den Kopf gehen lassen. Ist schon echt witzig auf was für Ideen Leute beim Programmieren so kommen. 🙄



  • ich habe mir das mal angeschaut...
    kann es sein das es so vielleicht schneller und ohne zeichen-salat ist??

    void strlower( char *src, int len = 0 )
    {
    	if( len == 0 )
    		len = strlen( src );
    
    	while(len--)
    	{
    		switch( *src )
    		{
    			case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H':
    			case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P':
    			case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
    			case 'Y': case 'Z':
    				*src++ |= 0x20;
    			break;
    			default: *src++; break;
    		}
        } 
    }
    

    muss aba nicht sein. und bei mir lief es in den test immer alles glatt


Anmelden zum Antworten