Ich habe versucht, reguläre Ausdrücke auf scanf zu verwenden, um eine Zeichenfolge mit maximal n Zeichen zu lesen und alles andere bis zum neuen Zeilenzeichen zu verwerfen. Alle Leerzeichen sollten als reguläre Zeichen behandelt und somit in die zu lesende Zeichenfolge eingeschlossen werden. Ich habe einen Wikipedia-Artikel über Reguläre Ausdrücke studiert, aber ich kann scanf nicht richtig funktionieren. Hier ist ein Code ich habe versucht:Verwenden Sie scanf mit regulären Ausdrücken
scanf("[ ]*%ns[ ]*[\n]", string);
[] soll für den eigentlichen Raumzeichen gehen, wird * soll ein oder mehrere bedeuten, n die Anzahl der zu lesenden Zeichen und String ist ein Zeiger zugewiesen mit malloc. Ich habe verschiedene Kombinationen ausprobiert; aber ich neige dazu, nur das erste Wort eines gelesenen Satzes zu erhalten (stoppt bei Leerzeichen). Darüber hinaus scheint * ein Zeichen zu verwerfen anstatt "null oder mehr" zu bedeuten ...
Kann jemand im Detail erklären, wie reguläre Ausdrücke von scanf interpretiert werden? Was ist mehr, ist es effizient, getc wiederholt zu verwenden?
Vielen Dank im Voraus: D
Versuchen Sie 'fgets()': 'fgets (string, sizeof string, stdin);' – pmg
Das Problem ist, dass alle verbleibenden Zeichen im Eingabestream verbleiben, nicht wahr? – someone
Wenn genug Platz ist, 'fgets()' verbraucht alles bis zu (und inklusive) ein ''\ n''. – pmg