phyton in c++



  • Wenn ich soetwas habe

    def SetRequestMethod(self,value = "GET"):
        self.requestMethod = string.upper(value)
    

    setze ich das so in c++ um?

    in .h

    void SetRequestMethod( const char *_value);
    

    und in .cpp

    void blub::SetRequestMethod(const char *_value = "GET")  // bedeutet das hier default GET wenn nichts anderes übergeben?
    {
    
      std::string str;
      // MAKE UPPER
    
      requestMethod_ = str;
    }
    

    oder heisst es in der .cpp nur
    SetRequestMethod(const char *_value)??

    Wann ist es sinnvoll const char* zu nehmen und wann nur char* ?

    gibt es eine einfache möglichkeit MAKE UPPER zu machen, oder muss ich jedes zeichen durchgehen und ascii code vergleichen und bei jeden zeichen schauen ob es einen wert zw. 97-122 und dann einfach ein - 32 machen?



  • Defaultparameter nur im header angeben.

    Es gibt eine Funktion die toupper heisst. Also entweder mit std::for_each durch den string iterieren und für jedes Zeichen toupper aufrufen oder mit einem Index iterieren.

    Const char * ist immer dann sinvoll wenn der Inhalt des Parameters nicht geändert werden darf.



  • geht das auch so?

    static void MakeLower( char *c )
    {
      int i = *c;
      for( i = 65; i< 91; i++)
      {
        i = i+32;
        break;
      }
      *c = i;
    }
    

    und dann halt

    while(*_value)
      {
        MakeLower(*_value);
        _value++;
      }
    


  • Also bei

    std::string str;
    
    //und dann 
    
    str.  // hier kommt kein  toupper
    


  • Warum selbst machen wenn es das schon gibt ?

    std::string str="irgendEin StRiNg";
    for(int i=0;i<str.length();i++)
        str[i]=toupper(str[i]);
    


  • gibts acuh ein

    tolower?



  • Ja. 🙂



  • immer dieses login schrieb:

    Warum selbst machen wenn es das schon gibt ?

    std::string str="irgendEin StRiNg";
    for(int i=0;i<str.length();i++)
        str[i]=toupper(str[i]);
    

    Wozu Indizees verwenden, wenn man Iteratoren nehmen kann? 😉 Außerdem gibt es von der STL das meiner Meinung nach viel zu wenig genutzte transform:

    #include <cctype>
    #include <algorithm>
    
    .....
    
    std::string str="irgendEin StRiNg";
    transform( str.begin(), str.end(), str.begin(), toupper
    


  • Wobei ihr hier alle mal wieder das int vs. char vs. unsigned char Problem im Zusammenhang mit tolower/toupper vergesst.

    Korrekterweise müsst es:

    transform( str.begin(), str.end(), str.begin(), &toUpper);
    

    heißen wobei toUpper dann z.B. so aussähe:

    inline char toUpper(char c)
    {
        return toupper(static_cast<unsigned char>(c));
    }
    

Anmelden zum Antworten