2017-05-07 3 views
0

Ich habe Probleme, Sätze aus Textdatei in einem Char-Array zu lesen.Sätze zu Char-Array von Textdatei bis Punkttrennzeichen lesen

Textdatei:

I am working at a gym. 
Someone has stolen my 
backpack. 
Everybody lies. 
Hello 
to 
everyone. 

Erwartetes Ergebnis (in Array)

I am working at a gym. 
Someone has stolen my backpack. 
Everybody lies. 
Hello to everyone. 

Zuerst habe ich versucht, diese fgets unter Verwendung ausdrucken fuction wie folgt aus:

FILE* file = fopen("zdania.txt", "r"); 
char line[256]; 

while (fgets(line, sizeof(line), file)) { 
    printf("%s", line); 
} 

fclose(file); 

return 0; 

Aber es ist eine schlechte Lösung, weil es Zeile für Zeile liest, und in meinem Fall muss ich den Satz bis zum Punkt lesen gefunden.

Ich habe auch versucht, etwas mit getc-Funktion zu tun, aber es stoppt, wenn der Punkt gefunden wird.

+1

Was ist mit dem Eingang "Meine IP-Adresse ist 127.0.0.1."? – pmg

+0

Ja, das ist eine gute Frage ... –

Antwort

3
int ch; 
while ((ch = fgetc(file)) != EOF) { 
    if (ch == '.') { 
     /* deal with dot */ 
    } else { 
     /* deal with non dot */ 
    } 
} 
/* deal with possibly unfinished data */ 
+0

Danke, es funktioniert gut.Auf jeden Fall habe ich Probleme mit der neuen Linie handling, ich habe extra hinzugefügt, wenn Bedingung char gleich neue Zeile dann nichts tun. Aber jetzt produziert es zusätzliche Tabellierung in jedem nächsten Satz. –

+0

Sie müssen möglicherweise Sequenzen von zwei (oder mehr) Zeichen identifizieren und anders handeln. Ein Leerzeichen nach einem Punkt sollte anders behandelt werden, dass ein Leerzeichen nach einem Buchstaben. Zwei Zeilenumbrüche zusammen sollten vielleicht anders behandelt werden als zweimal die Behandlung für eine einzige neue Zeile. ... – pmg

+0

Okay, aber wie bekomme ich nächsten Char, es wie Sie zu tun sagen? –

0

können Sie stattdessen gefunden jeder char bis . gelesen. Verwenden Sie möglicherweise fread anstelle von fgets, und gehen Sie über das Ergebnis-Array char von char, um . zu finden. ein anderer Weg ist zu verwenden strstr()