ERLEDIGT
JA
JA
ANTWORTEN
25
25
ZUGRIFFE
983
983
EMPFEHLEN
-
Was wie wo?
Feld (in dem Sinn) == Array == Vektor
String == Array aus vielen char´s, also Array
Folgt:
String == VektorNetiquette (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, ...?
-
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
-
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, ...?
-
char wortArray[10];
-
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, ...?
-
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��X{�U�f�َ{� by S��X{�U�f�َ{� ISAAC S��X{�U�f�َ{� ASIMOV��X{�U�f�َ{� Red V��X{�U�f�َ{� and V��X{�U�f�َ{� Slim��X{�U�f�َ{� m�found�U�f�َ{� m�found�the�َ{� m�found�the�tw{� m�found�the�twstrange m�found�the�twstrange m�found�the�twstrange m�found�the�twstrange m�found�the�twstrange m�found�the�twstrange they m�found�the�twstrange heard m�found�the�twstrange theound�the�twstrange theothunder�twstrange theothunder�soundsrange theothunder�soundsratheylittle theothunder�soundsratheylknewe theothunder�soundsratheylknewethatmals theothunder�soundsratheylknewethatmtheythe�morning~after theothunder�soundsratheylknewethatmtheytcouldrning~after theothunder�soundsratheylknewethatmtheytcouldrneverafter theothunder�soundsratheylknewethatmtheytcouldrneverashow their theothunder�soundsratheylknewethatmtheytcouldrneverashow new theothunder�soundsratheylknewethatmtheytcouldrneverashow petsothunder�soundsratheylknewethatmtheytcouldrneverashow etsotounder�soundsratheylknewethatmtheytcouldrneverashow etsotoutheirsoundsratheylknewethatmtheytcouldrneverashow etsotoutheirsparentstheylknewethatmtheytcouldrneverashow *** stack smashing detected ***: ./token terminated Speicherzugriffsfehler
Geändert von Davicito (25.11.11 um 08:40 Uhr)
-
25.11.11 08:35 #22
- 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...)
Und ein Array brauchst du nicht leeren. Du kannst es doch einfach mit neuen Buchstaben überschreiben...Code c:1 2
wortArray[spalten] = '\0'; puts(wortArray);
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.
-
Hallo deepthroat,
hab deinen Ratschlag befolgt und dies in den else-Zweig getan
und bekomme nun folgende ausgabe: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); } } ...
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$
-
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, ...?
-
25.11.11 09:30 #25
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
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
-
DB2: String und Zahl zusammenfügen
Von CurlyConny im Forum Relationale DatenbanksystemeAntworten: 1Letzter Beitrag: 05.08.08, 10:04 -
Mehrfaches Character-Replacement in einem String - Effizienz?
Von dlk94mylis im Forum JavaAntworten: 3Letzter Beitrag: 08.05.07, 09:36 -
Syntax error converting datetime from character string
Von daschii im Forum Relationale DatenbanksystemeAntworten: 0Letzter Beitrag: 13.02.06, 10:20 -
Einzelne PDF Dateien zusammenfügen?
Von bigfella im Forum Office-AnwendungenAntworten: 4Letzter Beitrag: 23.01.05, 17:49 -
Einzelne zeilen auslesen und in einer zusammenfügen?
Von thevibe im Forum Visual Basic 6.0Antworten: 3Letzter Beitrag: 16.09.04, 15:33






Zitieren
Login






