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)); }