Ganz blöde Frage: Leerzeichen entfernen?

Braucht man in Version zwei nicht, und der abschliessende whitespace wird bei dir nicth entfernt. Die erste Version war nur eine Variante des Vorposters, die zweite Version braucht nur einen Zusaetzlichen charpointer. Der Nachteil bei deiner Version waere zusaetzlich, dass ich gar nicht mehr weiss, wie lang mein Array denn jetzt noch ist. Da es jetzt um die Anzahl der fuehrenden Leerzeichen verkuerzt ist. Sowas halte ich fuer aeusserst schlechtes Design in Hinblick auf Fehleranfaelligkeit.
 
Version: nur fuehrenden und abschliessenden whitespace:
Code:
void strim(char *s) {
   char *p;
   p=s;
   while (isspace(s++))
       ;
   for (;*s!='\0';s++)
       *p++=s;
   while(isspace(--p))
        ;
     ++p='\0';
}
 
Nachteil bei deiner Version waere zusaetzlich, dass ich gar nicht mehr weiss, wie lang mein Array denn jetzt noch ist. Da es jetzt um die Anzahl der fuehrenden Leerzeichen verkuerzt ist. Sowas halte ich fuer aeusserst schlechtes Design in Hinblick auf Fehleranfaelligkeit.
Das "Array" ist dann genauso lang wie vorher, es wird nicht verändert.

Code:
char *psz = "    foobar";

printf(":%s:\n", ltrim(psz));
printf(":%s:\n", psz);


/* und sogar mit malloc geht's wunderbar */
char *psz, *pszf;
psz = pszf = (char*)malloc(20 * sizeof(char));
strcpy(psz, "    Foobar");
psz = ltrim(psz);

free(pszf) /* kein Problem hier */
Also ich sehe da kein Problem drin.
Im Gegenteil, zwei Arrays sind sogar speicherverschwendung.
 
Doch ist es!
Dein Array 0... symbolisieren die pointer
< 0 > < 1 > < 2 > < 3 > < 4 > < 5 > .... < N >
Du setzt den Pointer Auf den ersten !whitespace zB < 3 >
Dann gibts du dieses Array der dimension N-3 zurueck
< 3 > < 4 > < 5 > .... < N >
Da jemanden jetzt eventuel nicht klar ist, dass er jetzt einen um 3 Verkuerztes Array hat, versucht er spaeter vielleicht noch N Zeichen in das Array zu schreiben.

Und ich benutze kein zweites Array!
 
Und wie wärs mit der STL. Mit std::string passiert euch sowas nicht :-) !
Er fragte doch nach einer C++ Lösung oder? (sehe hier malloc :confused: )

Code:
void trim(std::string& strInput)
{
   // string von VORN durchgehen
   for(size_t i=0; i<strInput.length(); i++)
   {
      if(strInput[i]==' ') 
      {
           strInput.erase(0,1);	//erstes Zeichen löschen
           i=-1;		//auf -1 = nächsten Durchlauf 0 (wegen String-Kürzung)
      }
     else break;
   }

   // string von HINTEN durchgehen
   for(size_t i=strInput.length()-1; i>0 ;i--)
   {
        if(strInput[i]==' ') strInput.erase(i);	//letztes Zeichen löschen
        else break;
   }
}
 
Zurück