circular
Anmeldungsdatum: 14. Mai 2016
Beiträge: 13
|
Guten Abend, ich hab eine Frage zu folgender Problemstellung, Aus einer bereits erstellten Textdatei "Input.txt" soll die Anzahl der gleichen Wörter gezählt werden z.B. | Eine Rose ist eine Rose ist eine Rose. Eine Tulpe ist keine Rose.
|
liefert: | eine: 4‐mal rose: 4‐mal ist: 3‐mal tulpe: 1‐mal keine: 1‐mal
|
Mein bisherige Code sieht wie folgt aus: 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 | // Hausaufgabe 7
// Wörter zählen
#define MAX 255 // maximale Wortlänge der zu untersuchenden Datei
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int puffer;
char wort[MAX];
int i = 0; // Zähler
FILE *datei;
int anzahl;
int ersteswort = 0;
// Pfad der Datei
datei = fopen("input.txt", "r");
// prüfen ob Datei geöffnet werden kann
if(datei != NULL) {
// Ausgabe des Datei Inhaltes
while( (puffer =fgetc(datei)) != EOF) {
putchar(puffer);
if( (ersteswort == 0) && isalpha(puffer)) {
ersteswort++;
}
if(isspace(puffer)) {
anzahl++;
}
}
printf("\nAnzahl der Woerter = %d", anzahl+ersteswort);
}
else {
printf("Konnte Datei \"input.txt\" nicht öffnen!\n");
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
|
ich würde es gerne so machen das die einzelnen Worte in einen String gespeichert werden → dabei der Zähler für die anzahl DIESES Wortes um eins erhöht wird. Nach dem Leerzeichen oder '\n' wird das nächste wort eingelesen und mit strcmp() mit den bereits gespeicherten Worten verglichen.
Falls das Wort bereits vorhanden war → den zähler nochmals inkrementieren. Falls nicht → neue Zählvariable für dieses Wort erstellen. Das alles bis EOF erreicht ist & am ende die Ausgabe der gezählten Wörter mit den jeweiligen Strings. Für Denkanstöße wäre ich sehr dankbar!! Liebe grüße
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
Hm. Ich muss auch mal solche Hausaufgaben machen. Bin ja auch noch am Lernen. Bezüglich der Weiterverarbeitung, würde ich wahrscheinlich mit arrays arbeiten. Ich kann aber kein C und muss erstmal deine verwendeten Funktionen nachschlagen.
Bis dahin erstmal die Ideen: Idee:
Erstelle ein array mit strings und eins mit integern. Für jedes Wort in der Datei prüfst du, ob es schon im array ist, trägst es ggf. an der nächsten freien Position ein, und wenn es bereits existiert, an welcher Position. Dann könntest du im integer-array an der selben Position +1 rechnen und am Ende alles mit einer Schleife auslesen und ausgeben lassen. Bin jetzt mal deinen Code verstehen und melde mich anschließend wieder ☺
|
frostschutz
Anmeldungsdatum: 18. November 2010
Beiträge: 7657
|
Oder du machst dir ein Struct und hast dann beides (Wort und Zähler) zusammen in einem Array. Das mit dem Array ist der banale Ansatz. Für deinen Satz wird das gut funktionieren, für viel mehr wird das Programm auch nie taugen. Bei längeren Texten mit größerem Wortschatz hast du das Problem, daß du irgendwann ein Array mit 10'000 Wörtern hast und für jedes Wort musst du soviele Einträge durchgehen um den passenden Eintrag zu finden (oder festzustellen daß es keinen Eintrag gibt). Irgendwann summiert sich das... Dafür gibts dann Hashtabellen. Den Hash des Wortes kannst du nebenbei berechnen wenn du die Datei eh Byte für Byte einliest; der Hash ergibt dann einen Index in der Hashtabelle und darin hast du dann ein viel kürzeres Array das nur noch auf etwaige Hash-Kollisionen hin untersucht werden muss. Ein dritter Ansatz wäre das ganze als Baumstruktur aufzuziehen aus (Buchstabe, Zahl) Elementen. Und da wo die Zahl nicht 0 ist hast du ein Wort das du aus dem Baum wieder zusammensetzen kannst... da musst du nicht nach Wortkollisionen suchen sondern ob nach R->o->s schon mal ->e kam oder nicht. Solche Bäume sind am Anfang ziemlich breit und werden nach unten hin dünner, bei einem überschaubaren Alphabet a-z (und wenn RAM keine Rolle spielt) kann man hier aber den Buchstaben direkt als Index nehmen...
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
Zusätzlich merke ich gerade, wie komplex es ist in C Text zu verarbeiten. Mein Ansatz war alles per toupper(currentChar) zu vergleichen, um die Buchstaben vom Rest zu unterscheiden. Das klappt zwar für Buchstaben prima, aber wenn man einen Text mit Smileys (:D ) oder englische Sätze wie "I'd like to buy a beer." hat, funktioniert das System nicht. Zudem muss man zwischenspeichern, ob nach dem Zeilenumbruch/Leerzeichen, etc. wieder ein Wort kommt oder eine neue Leerzeile, einzelner Buchstabe, etc., um festzustellen, ob es ein wirkliches neues Wort gibt oder nicht. Ich bleibe mal am Ball und versuche das ohne vorgefertigte Funktionen hinzubekommen. Danke an frostschutz für den an sich banalen Tipp mit dem struct . Hab ich gerade gar nicht dran gedacht...
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Hi circular, zuerst mal herzlich willkommen hier auf dem Forum ! Nun habe ich zu wenig Ahnung von C, als dass ich es Dir dort erklären könnte, aber grundsätzlich würde ich sowas mit einem assoziativen Array machen, dessen numerischer Inhalt dann einfach hochgezählt wird. Das erspart einem weitere Umstände. Ich zeige das Prinzip mal anhand von awk - da ist es recht übersichtlich: (nach C umsetzen musst Du selber !) track@track:~$ echo 'Eine Rose ist eine Rose ist eine Rose. Eine Tulpe ist keine Rose.' | awk '{gsub("[^[:alpha:] ]",""); for(i=1;i<=NF;i++) arr[$i]+=1 } END{ for(x in arr) print x, "-", arr[x] "x"}'
ist - 3x
Rose - 4x
keine - 1x
eine - 2x
Tulpe - 1x
Eine - 2x - oder, den Einzeiler mal sauber als awk- Skript geschrieben, mit Erklärbär: | #!/usr/bin/awk -f
# abspeichern:
{ gsub("[^[:alpha:] ]",""); # entferne alle Nicht-Buchstaben und -Leerzeichen
for(i=1;i<=NF;i++) # zähle die Worte der Zeile durch
arr[$i]+=1 # und erhöhe den Wert des Array-Feldes zum jeweiligen Wort
}
# ausdrucken:
END { for(x in arr) # für alle vorhandenen Worte (= Indices)
print x, "-", arr[x] "x" # drucke Index und Zelleninhalt
}
|
Auf die Umwandlung in Kleinbuchstaben habe ich hier einfach mal verzichtet. LG, track
|
circular
(Themenstarter)
Anmeldungsdatum: 14. Mai 2016
Beiträge: 13
|
Danke euch erstmal für die schnellen Antworten. Vom sinn her habe ich alles verstanden, es hapert jedoch schon an dem einlesen der Textdatei → das dass erste wort in ein Array gespeichert wird. & diese dann in die Struktur zu speichern. Fragen: Wann & wie speicher ich die structs ? beim einlesen der einzelnen zeichen ?
wie speicher ist es ein ? ( for schleife ? ) liebe grüße edit: bzw. wie kann ich eine variable vom typ des struct erstellen mit laufendem indize ? edit2: bin grade dabei am machen es tut sich allerdings nichts: 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 | // Hausaufgabe 7
// Wörter zählen
#include <stdio.h>
#include <stdlib.h>
struct einzelnes_wort {
char wort[30];
int zaehler;
};
int main(void) {
int puffer;
char wort[MAX];
int i = 0; // Zähler
FILE *datei;
// Pfad der Datei
datei = fopen("input.txt", "r");
// prüfen ob Datei geöffnet werden kann
if(datei != NULL) {
// Ausgabe des Datei Inhaltes
for(;puffer != EOF;i++) {
puffer =gets(datei);
struct einzelnes_wort word[i];
word[i].wort[i] = puffer;
if(puffer == EOF || puffer == ' ') {
word[i].wort[i] = '\0';
i = -1;
printf("%s",i);
}
}
}
else {
printf("Konnte Datei \"input.txt\" nicht öffnen!\n");
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
|
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
Mir kam leider mein Östrogenmonster dazwischen. Aber ich habe den Ansatz, erstmal die Zeichen richtig zu verarbeiten und mir die Wörter einzeln auszugeben. Anschließend kann ich dieses Wissen dann einsetzen, um mit struct und array weiterzumachen. Ich kann dir gerne posten, was ich habe. Bin da aber von C++ sehr verwöhnt, was den Umgang mit strings angeht, daher ist das noch nicht optimiert... 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 | #include <stdio.h>
#include <ctype.h>
int isValidChar(int c) {
int letterBegin = 65; //only UPPER chars!
int letterEnd = 90; //48-57: number chars 0-9;
if( toupper(c) >= letterBegin && toupper(c) <= letterEnd ) {
return 1;
}
return 0;
}
int main ()
{
FILE *fp;
int currentChar;
int wordCounter = 0;
int lastChar = '-';
fp = fopen("file.txt","r");
if( fp == NULL ) {
perror("Error in opening file");
return(-1);
}
do
{
currentChar = fgetc(fp);
if( feof(fp) ) {
break;
}
if( isValidChar(currentChar) ) { //is char from word or alphabetical single char
printf("%c", currentChar);
}
else { //skip current char but check last one!
if( isValidChar(lastChar) ) {
wordCounter+=1;
printf("\n");
}
}
lastChar=currentChar;
}while(1);
printf("\nFound %i words", wordCounter);
fclose(fp);
return(0);
}
|
/edit: falsch bearbeiteten Code gegen den nun aktuellen getauscht. (Vorher falsche Klammersetzung beim Rausnehmen der Testfunktionen und sinnlose Prüfungen auf irrelevante Werte enthalten)
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Wenn Du jetzt erstmal noch mit Strings und Arrays "hängst", dann hilft Dir womöglich diese Übersicht der HU Berlin weiter ? Und ehe ich assioziative Arrays selber zu Fuß schreibe, würde ich mal gucken, ob es da nicht schon eine fertige Library gibt. Vielleicht tut es ja diese Library schon ? LG, track
|
frostschutz
Anmeldungsdatum: 18. November 2010
Beiträge: 7657
|
track schrieb: Und ehe ich assioziative Arrays selber zu Fuß schreibe, würde ich mal gucken, ob es da nicht schon eine fertige Library gibt. Vielleicht tut es ja diese Library schon ?
Da es eine Hausaufgabe ist, wird es wohl nicht erwünscht sein, da was fertiges für zu nehmen. Ansonsten könnte man jetzt auch mit strtok() und solchen Sachen anfangen, aber es geht bei Hausaufgaben auch darum mal zu lernen, wie das Zeug eigentlich auf den unteren Ebenen funktioniert. Solche Hausaufgaben haben meist wenig damit zu tun wie man das in einem richtigen Programm schreiben würde... vielleicht mit einer schönen String-Library die sicher vor Pufferüberläufen und ähnlichem Krams ist. Oder wie in deinem Beispiel, gar nicht erst mit C 😉 😉
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12822
|
Herzlich willkommen hier im Forum! Das in C zu machen ist wirklich eine Aufgabe für jemanden der Vater und Mutter erschlagen hat. Nur mal zum Vergleich, so sieht so etwas in Ruby aus: | counts = Hash.new 0
ARGF.each do |line|
line.scan /\w+/ do |word|
counts[word.downcase] += 1
end
end
counts.each do |word, count|
printf "%10d %s\n", count, word
end
|
Das wird in C deutlich mehr Zeilen benötigen. In C++ käme man vielleicht noch auf eine einigermaßen ähnliche LoC.
|
circular
(Themenstarter)
Anmeldungsdatum: 14. Mai 2016
Beiträge: 13
|
rklm schrieb: Das in C zu machen ist wirklich eine Aufgabe für jemanden der Vater und Mutter erschlagen hat.
Vielleicht vielleicht .. 🙄 ja ist nicht ganz trivial aber was solls. bin jetzt soweit das ich die einzelnen Zeichen einlese und sie in das Feld übergebe und ausgeben kann, funktioniert auch soweit. Frage mich jetzt allerdings wie ich das jetzt einzeln in die jeweiligen Char-Arrays speichern kann bis ein ' ' auftritt.. vllt mit 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 | // Hausaufgabe 7
// Wörter zählen
#define MAX 255 // maximale Wortlänge der zu untersuchenden Datei
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct einzelnes_wort {
char wort[30];
int zaehler;
};
int main(void) {
int puffer;
char wort[MAX];
int j,i = 0; // Zähler
FILE *datei;
int anzahl;
int ersteswort = 0;
// Pfad der Datei
datei = fopen("input.txt", "r");
// prüfen ob Datei geöffnet werden kann
if(datei != NULL) {
// Ausgabe des Datei Inhaltes
for(;puffer != EOF;i++) {
puffer =fgetc(datei);
struct einzelnes_wort word[j];
word[j].wort[i] = puffer;
if(puffer == EOF || puffer == ' ') {
word[j].wort[i] = '\0';
i = -1;
}
printf("%c",word[j].wort[i]);
//}
}
}
else {
printf("Konnte Datei \"input.txt\" nicht öffnen!\n");
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
|
Danke für die herzliche Begrüßung, bin allerdings in diesem Forum schon seit 2005 habe nur leider mein Passwort/Nicknamen und damalige email vergessen 😀 edit: habe eine frage zum laufenden indize: momentan sieht die ausgabe wie folgt aus: 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 | word[0].wort[0] = W
word[0].wort[1] = i
word[0].wort[2] = e
word[1].wort[3] =
word[1].wort[4] = o
word[1].wort[5] = f
word[1].wort[6] = t
word[2].wort[7] =
word[2].wort[8] = m
word[2].wort[9] = a
word[2].wort[10] = n
word[3].wort[11] =
word[3].wort[12] = w
word[3].wort[13] = i
word[3].wort[14] = e
word[4].wort[15] =
word[4].wort[16] = o
word[4].wort[17] = f
word[4].wort[18] = t
word[5].wort[19] =
word[5].wort[20] = m
word[5].wort[21] = a
word[5].wort[22] = n
word[6].wort[23] =
word[6].wort[24] = w
word[6].wort[25] = i
word[6].wort[26] = e
word[7].wort[27] =
word[7].wort[28] = o
word[7].wort[29] = f
word[7].wort[30] = t
word[8].wort[31] =
word[8].wort[32] = m
word[8].wort[33] = a
word[8].wort[34] = n
word[9].wort[35] =
word[9].wort[36] = i
word[9].wort[37] = s
word[9].wort[38] = t
word[10].wort[39] =
|
ich habe es jetzt geschafft jeweils ein einzelnes struct bis zum auftreten des Leerzeichens zu erstellen. so weit so gut. leider zählt er mir die Iteration i weiter durch. schöner wäre es wenn z.B. word[0].wort[0-3] = das wort. und dann word[1][0-3] das nächste. allerdings kommt wenn ich die Iteration in der Bedingung ob ein Leerzeichen da ist = 0 setze folgendes raus: CODE: 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 | // Hausaufgabe 7
// Wörter zählen
#define MAX 255 // maximale Wortlänge der zu untersuchenden Datei
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct einzelnes_wort {
char wort[30];
int zaehler;
};
int main(void) {
int puffer;
char wort[MAX];
int j = 0;
int i = 0; // Zähler
FILE *datei;
int anzahl;
int ersteswort = 0;
// Pfad der Datei
datei = fopen("input.txt", "r");
// prüfen ob Datei geöffnet werden kann
if(datei != NULL) {
// Ausgabe des Datei Inhaltes
for(;puffer != EOF;i++) {
puffer =fgetc(datei);
struct einzelnes_wort word[j];
word[j].wort[i] = puffer;
if(puffer == EOF || puffer == ' ') {
word[j].wort[i] = '\0';
j++;
i = 0;
}
printf("word[%d].wort[%d] = %c\n",j,i,word[j].wort[i]);
}
//}
}
else {
printf("Konnte Datei \"input.txt\" nicht öffnen!\n");
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
|
Ausgabe: 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 | word[0].wort[0] = W
word[0].wort[1] = i
word[0].wort[2] = e
word[1].wort[0] = ²
word[1].wort[1] = o
word[1].wort[2] = f
word[1].wort[3] = t
word[2].wort[0] = p
word[2].wort[1] = m
word[2].wort[2] = a
word[2].wort[3] = n
word[3].wort[0] =
word[3].wort[1] = w
word[3].wort[2] = i
word[3].wort[3] = e
word[4].wort[0] = 0
word[4].wort[1] = o
word[4].wort[2] = f
word[4].wort[3] = t
word[5].wort[0] = ²
word[5].wort[1] = m
word[5].wort[2] = a
word[5].wort[3] = n
word[6].wort[0] = p
word[6].wort[1] = w
word[6].wort[2] = i
word[6].wort[3] = e
word[7].wort[0] =
word[7].wort[1] = o
word[7].wort[2] = f
word[7].wort[3] = t
word[8].wort[0] = 0
word[8].wort[1] = m
word[8].wort[2] = a
word[8].wort[3] = n
word[9].wort[0] = ²
word[9].wort[1] = i
word[9].wort[2] = s
word[9].wort[3] = t
word[10].wort[0] = p
|
wo kommen die zeichen beim indize 0 her ? edit2: ok habe i=0 & j++ vor dem word[j].wort[i] = '\0'; gesetzt und es funktioniert. hachja macht das spass ☺ jetzt stellt sich mir die frage wie ich die einzelnen Zeichen in den jeweiligen struct miteinander vergleiche .. bisherige ausgabe: word[0].wort[0] = W
word[0].wort[1] = i
word[0].wort[2] = e
word[1].wort[0] =
word[1].wort[1] = o
word[1].wort[2] = f
word[1].wort[3] = t
word[2].wort[0] =
word[2].wort[1] = m
word[2].wort[2] = a
word[2].wort[3] = n
word[3].wort[0] =
word[3].wort[1] = w
word[3].wort[2] = i
word[3].wort[3] = e
word[4].wort[0] =
word[4].wort[1] = o
word[4].wort[2] = f
word[4].wort[3] = t
word[5].wort[0] =
word[5].wort[1] = m
word[5].wort[2] = a
word[5].wort[3] = n
word[6].wort[0] =
word[6].wort[1] = w
word[6].wort[2] = i
word[6].wort[3] = e
word[7].wort[0] =
word[7].wort[1] = o
word[7].wort[2] = f
word[7].wort[3] = t
word[8].wort[0] =
word[8].wort[1] = m
word[8].wort[2] = a
word[8].wort[3] = n
word[9].wort[0] =
word[9].wort[1] = i
word[9].wort[2] = s
word[9].wort[3] = t
word[10].wort[0] = es wäre glaube ich besser wenn man das ' ' -zeichen irgendwie aus dem Array löschen könnte das die Arrays nur mit den jeweiligen Buchstaben gefüllt sind, das man diese besser miteinander vergleichen kann..
|
Dakuan
Anmeldungsdatum: 2. November 2004
Beiträge: 6345
Wohnort: Hamburg
|
Das in C zu machen ist wirklich eine Aufgabe für jemanden der Vater und Mutter erschlagen hat.
Ganz so drastisch würde ich das nicht sehen. Aber mein Denkansatz würde das Anfängerstadium wohl auch überschreiten (weshalb ich meinen gestrigen Post nicht abgeschickt hatte). Aber ich frage mich, was das Ziel der Aufgabe ist. Der Aufgabensteller muss sich ja etwas dabei gedacht haben und das baut dann sicherlich auf zuvor gestellten Aufgaben auf. Meine Lösung wüde dann auch auf der Struktur "einzelnes_wort" aufbauen, allerdings in dieser Form:
| typedef struct einzelnes_wort {
int zaehler;
char * wort;
};
|
und damit würde ich dann ein dynamisches Array erstellen. Das hat zwar den Nachteil, das man für jedes Wort Speicher reservieren muss, aber wenn dieses Speicher Array vergrößert werden muss, kann man den bestehenden Inhalt einfacher kopieren. Bevor wir also alternative Vorschläge machen, sollten wir wissen, was das Lernziel ist bzw. welche Aufgaben dem vorangegangen sind.
es wäre glaube ich besser wenn man das ' ' -zeichen irgendwie aus dem Array löschen könnte ...
Möglicherweise ist das Erkennen eines Wortendes Teil der Aufgabe.
|
Lysander
Anmeldungsdatum: 30. Juli 2008
Beiträge: 2669
Wohnort: Hamburg
|
Wieso sollte man dafür nicht eine fertige Lib nutzen? Ich würde ja zu einer Lösung aus der glib raten, imho dem Schweizer Messer für C: https://developer.gnome.org/glib/stable/glib-Hash-Tables.html Die Aufgabe sagt ja nichts über die Datenstruktur aus, sondern es geht um das Wörter zählen... wenn man eine assoziative Struktur selber schreiben soll, sollte man die Aufgabe imho präzise darauf auslegen 😉
|
circular
(Themenstarter)
Anmeldungsdatum: 14. Mai 2016
Beiträge: 13
|
Danke für die antworten.. Wenn ich jetzt nur wüsste wie ich diese hash-Funktionen auf mein Problem anwende wäre ich glücklicher.
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
Dakuan schrieb: Aber ich frage mich, was das Ziel der Aufgabe ist. Der Aufgabensteller muss sich ja etwas dabei gedacht haben und das baut dann sicherlich auf zuvor gestellten Aufgaben auf.
Das wäre wirklich interessant zu wissen, da man damit auch die möglichen Werkzeuge bestimmen kann oder das Layout der Eingabe-Datei. Wenn diese eine feste Struktur hat ist es wesentlich leichter, als wenn man (so wie ich) nen Text-Durcheinander verwendet. Meine Testdatei sah zum Beispiel so aus:
Hello User! :D
I'd like to become a beefsteak^^!
Eine Rose ist eine Rose ist eine Rose. Eine Tulpe ist keine Rose.
Wir schreiben das Jahr 2016!
Das wars!
Da hatte ich dann Sonderzeichen, ne Leerzeile und Zahlen drin.
|