Zeichenketten



  • stell dir mal ne ascii tabelle vor und nachdem das immer etwas schwer ist,
    http://www.torsten-horn.de/techdocs/ascii.htm

    das kleine 'a' entspricht 97 dez
    das große 'A' entspricht 65 dez

    um jetzt aus dem kleinen ein großes zu machen müssen wir von dem kleinen 32 abziehen, und nachdem 'a'-'A' = 32 und dann gehts ganz einfach über zu
    c = c - ('a'-'A');
    c = c - (32);
    *s = c - (32);//statt in c speichern wir sofort in den string

    void toUpper(char *s){
      char c;
      do{
        //dem buffer den buchstaben geben
        c = *s;
        //ist es ein kleiner buchstabe
        if(c >= 'a' && c <= 'z'){
          //dann umwandeln wie oben beschrieben
          *s = c - ('a'-'A');
        }
        //zeiger auf den nächsten buchstaben
        s++;
        //wiederholen solange unser buchstabe != 0
      }while(c);
    }
    

    verwend bitte wenn du code postest die c/c++ tags den button unter dem 🙂 smiley



  • Der Code ist Schwachsinnig, da nur die erste Zeile eingelesen wird...



  • Gast schrieb:

    Der Code ist Schwachsinnig, da nur die erste Zeile

    eingelesen wird...

    Scheppertreiber schrieb:

    Ach ja, der Forums-Hausaufgabenservice muß mal wieder ran ... so nicht.

    ja das war schon so gedacht...

    @GAST324
    axo da ich mir die zahlen der ascii tabelle auch nicht merken will/kann, verwende ich im source eigentlich immer 'a'-'A' dann brauch ich da nicht mit zahlen rum fummeln 😉



  • DANKE LOLO!! langsam wirds hell! Eine andere Frage hätte ich noch, ich weiss aber nicht ob ich dafür ein neues Thema eröffnen muss! Es geht um Wahrheitstabellen!?[cpp]



  • GAST324 schrieb:

    Eine andere Frage hätte ich noch, ich weiss aber nicht ob ich dafür ein neues Thema eröffnen muss! Es geht um Wahrheitstabellen!?

    aber du könntest schon google zu liebe ein neues aufmachen mit dem titel wahrheitstabellen 😉



  • Scheppertreiber schrieb:

    Ach ja, der Forums-Hausaufgabenservice muß mal wieder ran ... so nicht.

    geht doch, wie du siehst *fg*

    GAST324 schrieb:

    Den Ausdruck versteh ich bloß noch nicht!
    void toUpper(char *s){
    char c;
    do{
    c = *s;
    if(c >= 'a' && c <= 'z')
    *s = c - ('a'-'A');
    s++;
    }while(c);
    }

    ^^ vergiss es, das innenleben der schleife gibts schon fertig: http://www.cplusplus.com/reference/clibrary/cctype/toupper/
    was bei 'a'-'A' rauskommt, ist sowieso nicht standardkonform, wenn ich mich nicht täusche. aber meistens geht's trotzdem. *fg*
    🙂



  • kleiner tip noch:

    um an sonderpunkte zu kommen, sollte das prog auch mit kleinen Umlauten umgehen können 😉



  • @kermitaner

    sag mal von welchen sonder punkten redest du? zeig uns doch mal wie das geht dann bekommst von mir ein sternchen :p

    lg lolo



  • fricky schrieb:

    noobLolo schrieb:

    *s = c - ('a'-'A');
    

    was bei 'a'-'A' rauskommt, ist sowieso nicht standardkonform, wenn ich mich nicht täusche. aber meistens geht's trotzdem. *fg*

    Und dort wo's geht, unterscheiden sich die beiden meistens um 32, und das ist eine Potenz von 2, deshalb kann man das auch einfacher machen.
    🙂



  • µngbd schrieb:

    fricky schrieb:

    noobLolo schrieb:

    *s = c - ('a'-'A');
    

    was bei 'a'-'A' rauskommt, ist sowieso nicht standardkonform, wenn ich mich nicht täusche. aber meistens geht's trotzdem. *fg*

    Und dort wo's geht, unterscheiden sich die beiden meistens um 32, und das ist eine Potenz von 2, deshalb kann man das auch einfacher machen.

    jo, da gabs doch den trick mit 'or 0x20' oder 'and 0xdf' *fg*
    🙂



  • noobLolo schrieb:

    @kermitaner

    sag mal von welchen sonder punkten redest du? zeig uns doch mal wie das geht dann bekommst von mir ein sternchen :p

    lg lolo

    na, mit

    if(c >= 'a' && c <= 'z') 
    *s = c - ('a'-'A');
    

    erwischt man natürlich nur die "normalen" Buchstaben, also werden üöä nicht zu ÜÖÄ umgewandelt.
    Wenn das eine Aufgabe ist, die mit Punkten bewertet wird, würde ich nicht die volle Punktzahl geben, weil die Umwandlung in Großbuchstaben nur unvollständig gelöst ist...



  • noobLolo schrieb:

    @kermitaner

    sag mal von welchen sonder punkten redest du? zeig uns doch mal wie das geht dann bekommst von mir ein sternchen :p

    lg lolo

    Er möchte lieber ein Rätsel daraus machen, wie es scheint. :p
    Man könnte aber auch die Locale mit der Funktion setlocale auf German setzen,
    eventuell die entsprechende Codepage setzen(Windows) und hoffen, das die Textdatei in der richtigen Kodierung vorliegt.
    Dann jedes Zeichen mit isalpha prüfen und mit toupper umwandeln. Oder gleich alles durch toupper jagen, kommt wohl aufs Gleiche raus.


Anmelden zum Antworten