toupper- /String- Problem!!



  • Sry, komm nicht wirklich mit 😕 . Heißt das, dass ich toupper(org[i]); einfach nur einer neuen string variable zueisn muss? Geht aber auch nich...

    Ist doch im Pronzip richtig, oder? Der String (string01) wird an die Funktion übergeben und zu org, woraus dann die Großbuchstaben entstehen soll'n. Nur der toupper - Fuktion ist keine Variable zugeordnet... 😕



  • Bei deiner Signatur der Funktion brauchst du auf jeden Fall eine Variable zum zwischenspeichern, so wie es DrGreethumb in seinem letzten Posting geschrieben hat geht es nicht, weil du der Variable keinen neuen Wert zuweisen kannst, weil du sie ja in der Signatur deiner Funktion als const deklariert hast. Und warum sollte das nicht gehen, dass du einer neuen Variable einfach den Rückgabewert von toupper zuordnest? Solltest du tatsächlich org verändern wollen solltest du mit Referenzen arbeiten und die Funktion keinen string zurückgeben lassen. Dann müsste die Signatur vielleicht so aussehen.

    void toUpperString(string & org)
    

    MfG



  • Wenn du den Orginalstring nicht verändern willst, erzeuge dir in deiner Funktion einen temporären string dem du das Ergebnis von toupper zuweist und den gibst du dann zurück.
    Was soll eigentlich dieser Umweg über den buffer beim Einlesen? Warum liest du nicht direkt in den string ein.

    string toUpperString(const string& org)
    {
    string tstr(org);    
    for (int i=0; i<org.size(); i++) // Was sollte dieses 80 hier?
        {
            tstr[i] = toupper(org[i]);
        }
        return tstr;
    }
    


  • @Braunstein: thx für die Hilfe.

    Allerdings kommen bei beim Ausführen 2 Fehler:

    Linker-Vorgang läuft...
    umwandlung.obj : error LNK2001: Nichtaufgeloestes externes Symbol "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl toUpperString(class std::basic_string<char,struct std::char_traits<char>,class std::al
    locator<char> >)" (?toUpperString@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V12@@Z)
    Debug/umwandlung.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
    Fehler beim Ausführen von link.exe.
    
    umwandlung.exe - 2 Fehler, 0 Warnung(en)
    

    PS: Die Eingabefunktion über den Buffer ist Vorgabe. Warum uch immer. Versteh ich selbst nich wirklich.

    ---------------------------------------------------
    Ich habe jetzt auch noch ne andere Lösung gefunden:

    string toUpperString(string org)
    {
    
    	for(int i = 0;  org[i] != 0;  i++)
    	{
        	if(org[i] >= 'a'  &&  org[i] <= 'z')
    		{
    			org[i] += 'A' - 'a';
    		}
    	}
    
    	return org;
    }
    

    ... ist aber vielleicht icht so praktisch, wenn beispielsweise der Zeichensatz auf dem OS nicht dem ASCII entspricht, sondern irgendein anderer, wo das Alphabet nicht hintereinander steht.



  • Ist bei Definition und Deklaration der Funktion auch gleich?



  • Ähm, der Linkerfehler kann eigentlich nur einen einzigen Grund haben:

    Du hast die Funktion nur unten bei der Definition geändert, aber nicht oben bei der Deklaration.



  • LordJaxom schrieb:

    Du hast die Funktion nur unten bei der Definition geändert, aber nicht oben bei der Definition.

    Schöner Satz. 😃



  • Wusste ich's doch 😃

    Ich hatte es gerade gesehen als ich Absenden gedrückt hab, da hatte das Forum nen kleinen Hänger. Und ich hab mir noch gedacht "und bis das Forum den Request verarbeitet hat hab ich vergessen es zu ändern" 🕶



  • öhm yo... wo ihr Recht habt, habt ihr Recht. 😃 Hab ich total vergessen...

    thx nochmal, jetzt gehts



  • Nur mal als Hinweis. Es gibt noch mehr Varianten.
    siehe z.Bsp. hier
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-147592.html



  • mhhh schon. allerdings war bei mir, hat ich glaub ich nich dazu gesagt, die eingabe in string gefordert.
    und bei den anderen beispielen (siehe link), bestehen die eingaben aus character-array's.

    trotzde gut zu wissen... 🙂



  • ob string oder char-Array ist doch hier egal. Das funktioniert mit beiden.


Anmelden zum Antworten