transform mit tolower



  • also so geht es bei mir...warum auch immer...

    #include <iostream>
    #include <string>
    
    int main(void)
    {
    	std::string word = std::string("HELLO");
    	std::transform(word.begin(), word.end(), word.begin(), tolower);
    	std::cout << word << std::endl;
    
    	return 0;
    }
    


  • Basingstoke schrieb:

    also so geht es bei mir...warum auch immer...

    Bei mir geht das auch (sogar mit „-Wall -pedantic“ unter GCC 4.2) aber das ist irrelevant, wenn es unter anderen Compilern nicht funktioniert. Außerdem fehlt bei dem Code der Header <algorithm>. Dass man den bei GCC zufälligerweise hier nicht extra einbinden muss, ist unglücklich.



  • das is ja eigenartig...also ist das compilerabhängig? ich benutze CodeBlocks mit mingw, kann es also daran liegen? oder wie ist das zu erklären



  • Müsste es nicht std::tolower heißen?



  • Hast du ein using namespace std drüber stehen. Dann lass das mal weg oder schreibe

    std::transform(wort.begin(),wort.end(),wort.begin(),::tolower);
    


  • alles was bisher gepostet wurde ist falsch. man braucht eine helper-function weil tolower nur mit unsigned char arbeitet



  • @23 könntest du uns diese helper funktion demonstrieren?



  • 23 schrieb:

    alles was bisher gepostet wurde ist falsch. man braucht eine helper-function weil tolower nur mit unsigned char arbeitet

    Na, dann schau Dir die Deklaration von std::tolower nochmal genau an. Da steht nichts von 'unsigned char', die Deklaration aus <cctype> arbeitet mit 'int'. Sauberer wär's natürlich, die Template-'tolower'-Version aus 'locale' zu verwenden.



  • Firefighter schrieb:

    @23 könntest du uns diese helper funktion demonstrieren?

    Wo ist denn da das Problem? Man muss nur nen dummen Wrapper schreiben. Aber wie gesagt: Das ist unnötig.

    char to_upper(char c) { return std::to_upper(c); }
    
    int main() {
        std::string s = "Hallo, Welt";
        std::transform(s.begin(), s.end(), s.begin(), to_upper);
    }
    


  • Konrad Rudolph schrieb:

    23 schrieb:

    alles was bisher gepostet wurde ist falsch. man braucht eine helper-function weil tolower nur mit unsigned char arbeitet

    Na, dann schau Dir die Deklaration von std::tolower nochmal genau an. Da steht nichts von 'unsigned char', die Deklaration aus <cctype> arbeitet mit 'int'.

    irrelevant, da tolower erwartet, dass sich sein parameter als unsigend char darstellen lässt. und da char entweder signeder oder unsigned sein kann, müsstest du zuerst casten.



  • queer_boy schrieb:

    Konrad Rudolph schrieb:

    23 schrieb:

    alles was bisher gepostet wurde ist falsch. man braucht eine helper-function weil tolower nur mit unsigned char arbeitet

    Na, dann schau Dir die Deklaration von std::tolower nochmal genau an. Da steht nichts von 'unsigned char', die Deklaration aus <cctype> arbeitet mit 'int'.

    irrelevant, da tolower erwartet, dass sich sein parameter als unsigend char darstellen lässt. und da char entweder signeder oder unsigned sein kann, müsstest du zuerst casten.

    Ah. Sorry, ich hatte nicht geschaltet, weil ich 'char' in C++ mangels der festgelegten Codierung immer als ASCII-7 betrachte und das achte Bit unbenutzt lasse. Und wenn das höchstwertige Bit 0 ist, dann besteht da ja kein Unterschied.


Anmelden zum Antworten