Zeichenketten



  • Um Tipps darf man ja wohl bitten...

    Ich glaube aber nicht, dass du völlig ahnungslos bist. Etwas wirst du ja wohl wissen müssen, wenn du so eine Aufgabe gestellt bekommst. Sag doch einfach mal wie weit du bisher alleine gekommen bist bzw. wie du dir vorstellst das Programm anfangen könnte, um deine Idee weiter auszubauen.



  • seid doch nicht so gemein bevor sie jetzt stunden nach nem anfang sucht 😉

    #include <stdio.h>
    #include <stdlib.h>
    
    void toUpper(char *s){
      char c;
      do{
        c = *s;
        if(c >= 'a' && c <= 'z')
          *s = c - ('a'-'A');
        s++;
      }while(c);
    }
    
    int main(void){
      char line[81]={0};
      //datei oeffnen
      FILE *fp = fopen("filename","r+b");
      if(fp==NULL){
        printf("konnte datei nicht oeffnen");
        return 1;
      }
      //zeile lesen
      fgets(line, 80,fp);
      //vergroessern
      toUpper(line);
      printf("%s",line);
      //datei schliessen
      fclose(fp);
      //bye bye babes
      return 0;
    }
    

    lg lolo



  • Ja gut es ist kein Neuland für mich aber ich hab keine Ahnung von aus einer Datei leisen und so! Ich hab Arrays in textdateien hineingeschrieben und solche Sachen aber etwas herauslesen...keine Ahnung wie ich da anfangen soll. Es geht ja nicht um Hausaufgaben erledigen sondern um den Ansatz Scheppi 🙂



  • Danke noobLolo das ist seeehr nett! Kann jetzt mal versuchen Zeile für Zeil nachzuvollziehen....eine Frage! Wie lernt man das so schnell... also C!!! Das ging flix bei dir!?

    LG Julia 😃



  • ja also viel mußt du jetzt nicht mehr machen denke es sind noch 2 zeilen wobei in der 2. nur ein } steht und die erste eine ergänzung zu einer bestehenden ist 😃



  • GAST324 schrieb:

    Das ging flix bei dir!?

    davon hab ich nichts mitbekommen wie immer ein langer steiniger weg 🙄

    lg lolo



  • Mensch will das auch können! 😮 👍 danke lolo



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

    Zeiger auf s und c muss zwischen a und z liegen aber was mach die nächste Zeile?!hmmm



  • 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