2016-12-27 3 views
0

Ich möchte eine vorhandene Datei lesen und Großbuchstaben den ersten Buchstaben jedes Wortes. Also dachte ich mir, ich könnte Wörter aus dem Zwischenraum zwischen ihnen herausfinden, aber ich weiß nicht, wie ich mich auf den ersten Buchstaben konzentrieren soll, also mache ich nur Großbuchstaben, hier ist mein Code so weit.Lies eine Textdatei und den ersten Großbuchstaben jedes Wortes in C

#include <stdio.h> 
#include <stdlib.h> 
#include <conio.h> 
#include <ctype.h> 

int main() 
{ 
int chr,i; 
FILE *fp; 
fp = fopen("DATA.txt" , "r"); 

do 
{ 
    chr = fgetc(fp); 
    chr = toupper(chr); 
    printf("%c" , chr); 

    if (chr==' ') 
     { 
      getch(); 
     } 

} while(chr!=EOF); 

fclose(fp); 
} 
+0

warum haben Sie diese Zeile 'getch();'? –

+1

nur um Programmfluss langsam zu sehen, sonst nichts –

+1

Ein Debugger wäre besser –

Antwort

3

... den Trick, wie man auf den ersten Buchstaben konzentrieren ... (?)

Detect den ersten Buchstaben jedes Wortes durch das vorherige Speichern Charakter. Lassen Sie ein Wort mit 1) einer beliebigen Sequenz von oder 2), wenn das erste gelesene Zeichen ein Buchstabe ist.

Andere Probleme: EOF Erkennung zu spät. Suchen Sie nach EOF direkt nach fgetc()

// EOF test too late 
    chr = fgetc(fp); 
    chr = toupper(chr); 
    printf("%c" , chr); 
} while(chr!=EOF); // too late 

// Instead 
    chr = fgetc(fp); 
    if (chr == EOF) break; 

Alle zusammen

int previous = ' '; 
while ((chr = fgetc(fp)) != EOF) { 
    if (isspace(previous) && isalpha(chr)) { 
    chr = toupper(chr); // uppercase first letter of every word 
    } 
    printf("%c" , chr); 
    previous = chr; 
} 
1

Angenommen, Sie wirklich, dass die Warte tun wollen nach jedem Raum (angenommener Grund für Ihr getch() dort) gelesen wird, dann können Sie versuchen, i = 0, bevor Sie Ihre do-Schleife zu setzen. Dann, wenn (i == 0), dann chr = toupper (chr) und inkrementieren i. Innerhalb der if (chr == '') schließe ich wieder i = 0 ein.

Auch, wenn Sie andere Abstand Zeichen (Zeilenumbrüche, Tabulatoren, etc.) berücksichtigen wollen, dann sollten Sie include <ctype.h> und verwenden isspace() Funktion wie if(isspace(chr)) statt if(chr == ' ').

2

Dies sollte

bool upperNext = true; 

while((chr = fgetc(fp)) != EOF) { 
    if(chr == ' ' || chr == '\r' || chr == '\n') { 
     upperNext = true; 
    } else if(upperNext) { 
     chr = toupper(chr); 
     upperNext = false; 
    } 

    printf("%c" , chr); 
} 
+0

@BLUEPIXY du hast Recht – man

Verwandte Themen