C-String in umgekehrter Reihenfolge zurückliefern



  • Hallo,
    oder "in-place"

    void rev(char* str)
    {
    	char* last = str + strlen(str);
    	while (str < last)
    	{
    		char t = *str;
    		*str++ = *--last;
    		*last = t;
    	}
    }
    


  • so kann man es natürlich auch machen. nur leider benutze ich VC++6 🤡
    da gewöhnst du dir vernünftigen programmierstil schnell ab.



  • Sind wir hier im C-Forum oder was?

    #include <string>
    #include <algorithm>
    
    std::string s("Hallo");
    std::reverse(s.begin(), s.end());
    

    Wenn der orig. String nicht geändert werden soll, kann man auch reverse_copy benutzen.



  • Sind wir hier im C-Forum oder was?

    Nope. Aber zeigst du mir bitte die Stelle im C++ Standard, in der steht, dass nullterminierte char-Arrays verboten sind.

    Ich bevorzuge persönlich natürlich ebenfalls std::strings. Nur:
    1. schien der OP char* verwenden zu wollen.
    2. gibt es genug Code auf der Welt der char* verwendet und damit ist es definitiv nicht verkehrt, wenn man lernt damit umzugehen.

    Zu deinem Codebeispiel:
    In wiefern unterscheidet sich das von 0xdeadbeefs Lösung?



  • Sorry, 0xdeadbeefs Lösung hab ich nicht mitbekommen. Wurde von den C-Lösungen erschlagen.

    Was die Arrays angeht: wir programmieren hier doch alle in C++ um das OO-Paradigma einzusetzen oder? Klar steht im Standard nicht drin, das man keine char-Arrays benutzen darf. Aber wenn es danach gehen würde... 🙄 Und vielleicht weiß es der OP einfach nicht besser?



  • wir programmieren hier doch alle in C++ um das OO-Paradigma einzusetzen oder?

    Keine Ahnung wer "wir" sind, aber ich für meinen Teil programmiere nicht deshalb in C++. Wenn OOP meine einzige Sorge wäre, würde ich in einer Sprache wie Smalltalk o.Ä. programmieren.
    Ich schätze an C++ gerade die Flexibilität die es einem ermöglicht auch andere Ansätze zu verfolgen.



  • Konfusius schrieb:

    so kann man es natürlich auch machen. nur leider benutze ich VC++6 🤡
    da gewöhnst du dir vernünftigen programmierstil schnell ab.

    wen der bauer nicht schwimmen kann, sagt er, die badehose sei kaputt.

    #define for if(false);else for
    
    #include <iostream>
    using namepsace std;
    
    int main(){
       for(int i=0;i<10;++i)
          cout<<i<<' ';
       for(int i=10;i>0;--i)
          cout<<i<<' ';
       return 0;
    }
    


  • Vielen Dank für eure Beiträge, einige davon waren ja sehr nützlich wenn auch teilweise ein wenig zu heftig für den moment für mich ;-).

    Grosser dank an Volkars C++ Kurs, dein Online Referenz hat mir schon oft gute Unterstützung geboten.



  • wenns nur um die ausgabe geht könnte man es auch so machen:

    #include <iostream>
    #include <algorithm>
    #include <iterator>
    int main(){
         char txt[] = "Hallo Velo";
         std::reverse_copy(txt,txt+strlen(txt),std::ostream_iterator<char>(std::cout));
    }
    

    Was die Arrays angeht: wir programmieren hier doch alle in C++ um das OO-Paradigma einzusetzen oder?

    irgendwie nicht(zumindest nicht pur).



  • Artchi schrieb:

    Sind wir hier im C-Forum oder was?

    Ja, und du bist mal wieder der Horst 🙂


Anmelden zum Antworten