tutorials.de Buch-Aktion 05/2012
Seite 2 von 2 ErsteErste 12
ERLEDIGT
JA
ANTWORTEN
25
ZUGRIFFE
983
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #16
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Was wie wo?

    Feld (in dem Sinn) == Array == Vektor
    String == Array aus vielen char´s, also Array

    Folgt:
    String == Vektor
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  2. #17
    Davicito Davicito ist offline Mitglied Gold
    Registriert seit
    Oct 2010
    Beiträge
    145
    ich möchte eigentlich im else-zweig die zuvor komplett eingelesene Zeichen im Array "wortArray" als wort ausgeben.
    da aber immer beim zu letzt eingelesenen Zeichen im Array der vektor auf dem letzten Feld steht, bekomme ich auch nur das letzte Zeichen eines jeden wortes ausgegeben und nicht das ganze wort.

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    while((c = fgetc(file1)) != EOF)
     
    {       
           if((c >= 48 && c<= 57) || (c >= 65 && c <= 90) || (c >= 97 && c <= 122))
           {
                        
                wortArray[i] = c;
                printf("%c",wortArray[i]);
                //strcpy(wort, (char*) wortArray);
                cnt = 0; 
        }
        else
        {
                cnt++; 
                if(cnt == 1)
                {               
                    printf("%s\n",wortArray);                   
                    for(int i=0;i < 15; i++) wortArray[i] = ' '; //alle woerter der zeile
                }
     
        }
    }

    Hab mir jetzt gedacht, das array in eine Zeichenkette ohne vektoren (char* wort) zu konvertieren um somit im else-zw. das komplette wort zu sehen
     

  3. #18
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Was ist denn WortArray für ein Variablentyp.
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  4. #19
    Davicito Davicito ist offline Mitglied Gold
    Registriert seit
    Oct 2010
    Beiträge
    145
    char wortArray[10];
     

  5. #20
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Das ist wiedermal ein Rückschritt.
    Zuerst hattest du noch 500, jetzt 10?

    Keine Überlaufprüfung beim Befüllen. Programm kaputt.
    i ist nicht initialisiert. Programm kaputt.
    i wird nicht inkrementiert (deshalb immer nur der letzte Buchstabe).
    cnt ist komplett sinnlos.
    In der 15-Schleife machst du dein Programm kaputt. Wieder mal.

    Verständnisproblem (Variablenname und Kommentar): wortArray ist kein Array aus Wörtern.
    WortArray ist ein Array aus char´s. Ein char ist kein Wort, nur ein einzelner Buchstabe.
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  6. #21
    Davicito Davicito ist offline Mitglied Gold
    Registriert seit
    Oct 2010
    Beiträge
    145
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    
    int c = 0;
    int zeilen = 1;
     
    int spalten = 1;
    int  cnt = 0;                          // Dient zum vergleich
            
    while((c = fgetc(file1)) != EOF)
     
    {
        if(c == '\n')                  // Zählt die Zeilen
        {
            //printf("Zeichen: %i\n",zeilen);
            zeilen++;
            spalten = 1;                                // setzt spalen wieder auf 1, wenn eine neue Zeile beginnt 
        }
        if((c >= 48 && c<= 57) || (c >= 65 && c <= 90) || (c >= 97 && c <= 122))  // Liest brauchbare Zeichen ein
        {
            
            wortArray[spalten-1] = c;                    // Zeichen in Array für gefundene Wörter
            //printf("%c",wortArray[spalten-1]);
            //strcpy(wort, (char*) wortArray);
            cnt = 0;                                    // setzt cnt immer dann auf anfangswert, wenn zum erstenmal 
        }                                                      // wieder ein brauchbares Zeichen in er Zeile gefundenwurde
        else
        {
            cnt++;                                      // cnt wird hochgezählt, wenn unsinnige Zeichen gef. wurden
                                                                                              
            if(cnt == 1)                                         // nach dem das erstemal ein nicht brauchbares Zeichen gef. wurde,
            {                                       // soll nur einmal das Array als Wort ausgegeben werden
                                                            // und das Array soll danach wieder geleert werden für nächsten Zeichen
                                                            // es könnte ja sein, das 2 oder mehr unbrauchbare Zeichen
                                                            // hintereinander auftauchen. und da soll nur einmal diese Aktion, 
                                                            // Liste leeren und ausgeben, passieren     
                //strcpy(wort, wortArray);
     
               // Versuch eine Zeichenkette als Wort auf der Konsole auszugeben, welches im if eingelesen wurde.
                //for(int j=0;j < 15; j++)printf("%c\n",wortArray[j]);     
                //wort = wortArray;
                printf("%s\n",wortArray);                   
                
               for(int j=0;j < 15; j++) wortArray[j] = ' ';   // Array leeren, für neue Zeichen
            }
     
        }
                            
        spalten++;              
     
    }

    Ich hab nur Probleme mit der Darstellung auf der Konsole

    Ausgabe:
    Code c:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    
    izaguirre@ubuntu:~/C/Rowena4$ ./token -c test.txt Youth.txt
    YOUTH
          and      
              ADULTS&#65533;�X{�U�f�َ{�
     by            S&#65533;�X{�U�f�َ{�
        ISAAC      S&#65533;�X{�U�f�َ{�
              ASIMOV&#65533;�X{�U�f�َ{�
        Red        V&#65533;�X{�U�f�َ{�
            and    V&#65533;�X{�U�f�َ{�
                Slim&#65533;�X{�U�f�َ{�
                   m&#65533;found�U�f�َ{�
                   m&#65533;found�the�َ{�
                   m&#65533;found�the�tw{�
                   m&#65533;found�the�twstrange
                   m&#65533;found�the�twstrange
                   m&#65533;found�the�twstrange
                   m&#65533;found�the�twstrange
                   m&#65533;found�the�twstrange
                   m&#65533;found�the�twstrange
        they       m&#65533;found�the�twstrange
             heard m&#65533;found�the�twstrange
                   theound&#65533;the�twstrange
                   theothunder&#65533;twstrange
                   theothunder&#65533;soundsrange
                   theothunder&#65533;soundsratheylittle
                   theothunder&#65533;soundsratheylknewe
                   theothunder&#65533;soundsratheylknewethatmals
                   theothunder&#65533;soundsratheylknewethatmtheythe�morning~after
                   theothunder&#65533;soundsratheylknewethatmtheytcouldrning~after
                   theothunder&#65533;soundsratheylknewethatmtheytcouldrneverafter
                   theothunder&#65533;soundsratheylknewethatmtheytcouldrneverashow
        their      theothunder&#65533;soundsratheylknewethatmtheytcouldrneverashow
              new  theothunder&#65533;soundsratheylknewethatmtheytcouldrneverashow
                  petsothunder&#65533;soundsratheylknewethatmtheytcouldrneverashow
                   etsotounder&#65533;soundsratheylknewethatmtheytcouldrneverashow
                   etsotoutheirsoundsratheylknewethatmtheytcouldrneverashow
                   etsotoutheirsparentstheylknewethatmtheytcouldrneverashow
    *** stack smashing detected ***: ./token terminated
    Speicherzugriffsfehler
    Geändert von Davicito (25.11.11 um 08:40 Uhr)
     

  7. #22
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.

    Man sollte keine magischen Zahlen im Code benutzen. Statt 48 nimm '0', statt 57 nimm '9' usw. Es gibt auch die Funktionen isdigit, isalpha und isalnum...

    Zum Problem: Du mußt doch einfach nur den String vor der Ausgabe terminieren (was sheel übrigens bereits sagte...)
    Code c:
    1
    2
    
    wortArray[spalten] = '\0';
    puts(wortArray);
    Und ein Array brauchst du nicht leeren. Du kannst es doch einfach mit neuen Buchstaben überschreiben...

    Gruß

    \edit: *** stack smashing detected *** <-- was ist das denn für ein Fehler?! Hab ich ja noch nie gesehen
    Geändert von deepthroat (25.11.11 um 08:38 Uhr)
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  8. #23
    Davicito Davicito ist offline Mitglied Gold
    Registriert seit
    Oct 2010
    Beiträge
    145
    Hallo deepthroat,

    hab deinen Ratschlag befolgt und dies in den else-Zweig getan

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    .....
    }
    else
    {
    cnt++; 
        if(cnt == 1)
        {                           
                wortArray[spalten] ='\0';
                puts(wortArray);
                            
        }
    }
    ...
    und bekomme nun folgende ausgabe:

    Code c:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    
    izaguirre@ubuntu:~/C/Rowena4$ ./token -c test.txt Youth.txt
    YOUTH
    YOUTH
    Y
    YbyT
    YbyTISAAC
    Y
    Y
    Y
    Y
    Y
    Y
    Y
    Y
    Y
    Y
    Y
    Y
    Y
    Y
    Y
    Y
    Y
    Y
    Y
    Y
    Y
    Y
    Y
    Y
    Y
    Y
    Y
    Y
    Y
    Y
    Y
    *** stack smashing detected ***: ./token terminated
    Speicherzugriffsfehler
    izaguirre@ubuntu:~/C/Rowena4$
     

  9. #24
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Ohne jetzt zu überlegen, warum die Ausgabe genau so zustande kommt:
    Hast du auch den if-Zweig in Ordnung gebracht?

    Möglicherweise solltest du zuerst mal überlegen,
    was du dir eigentlich von diesem Programmstück erwartest,
    und uns das mitteilen.

    Kann ich, wenn ich an den Threadanfang denke, nämlich nicht mehr ganz nachvollziehen.
    Was willst du erreichen?
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  10. #25
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Bsp:
    Code c:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    char wort[20];
    int len = 0;
     
    while ((c = fgetc ...) {
      if (c == '\n') {
        ...
      } else if (isalnum(c)) {
        wort[len++] = c;
      } else {
        if (len > 0) {
           wort[len] = '\0'; puts(wort); len = 0;
        }
      }
    }
    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  11. #26
    Davicito Davicito ist offline Mitglied Gold
    Registriert seit
    Oct 2010
    Beiträge
    145
    Cool danke Deepthroat...
    Das klappt bestens. mit den Zählnern habe ich schon nicht mehr durchgesehen. manchmal sieht man den wald vor lauter Bäumen nicht .

    Dnake Dir nochmal an dieser stelle.


    Sheel... so hatte ich mir das vorgestellt. wie es in der Ausgabe, unten, zusehen ist.

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    
    ...
    int zeilen = 1;
     
    int zeilenSpalten = 1;
    int wortSpalten = 1;
     
    int cnt = 0;
     
     
    while((c = fgetc(file1)) != EOF)
     
    {
     
        if(c == '\n')
     
        {
     
           zeilen++;
     
           zeilenSpalten = 1;
     
        }
     
        if((c >= 48 && c<= 57) || (c >= 65 && c <= 90) || (c >= 97 && c <= 122))
     
        {                   
     
                 wortArray[wortSpalten-1] = c;
             wortSpalten++;
     
             cnt = 0; 
     
        }
     
        else
     
        {
     
             cnt++; 
     
             if(cnt == 1 && wortSpalten-1 > 0)
     
            {                 
                 wortArray[wortSpalten-1] ='\0';
     
                 puts(wortArray);
                 wortSpalten = 1;                                   
     
            }
     
        }   
            zeilenSpalten++;                
     
    }

    Ausgabe:
    Code c:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    
    izaguirre@ubuntu:~/C/Rowena4$ ./token -c test.txt Youth.txt
    YOUTH
    and
    ADULTS
    by
    ISAAC
    ASIMOV
    Red
    and
    Slim
    found
    the
    two
    strange
    little
    animals
    the
    morning
    after
    they
    heard
    the
    thunder
    sounds
    they
    knew
    that
    they
    could
    never
    show
    their
    new
    pets
    to
    their
    parents
    izaguirre@ubuntu:~/C/Rowena4$
     

Ähnliche Themen

  1. DB2: String und Zahl zusammenfügen
    Von CurlyConny im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 05.08.08, 10:04
  2. Antworten: 3
    Letzter Beitrag: 08.05.07, 09:36
  3. Syntax error converting datetime from character string
    Von daschii im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 13.02.06, 10:20
  4. Einzelne PDF Dateien zusammenfügen?
    Von bigfella im Forum Office-Anwendungen
    Antworten: 4
    Letzter Beitrag: 23.01.05, 17:49
  5. Einzelne zeilen auslesen und in einer zusammenfügen?
    Von thevibe im Forum Visual Basic 6.0
    Antworten: 3
    Letzter Beitrag: 16.09.04, 15:33