2016-12-27 68 views
0

我想讀取每個單詞的現有文件和大寫字母的第一個字母。所以我想我可以從他們之間的空間中找出單詞,但我不知道如何專注於第一個字母,所以我只是將所有大寫,這是我的代碼到目前爲止。讀取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

,爲什麼你有這條線'的getch();'? –

+1

只是看到程序流程緩慢,沒有別的 –

+1

調試器會更好 –

回答

3

...如何把重點放在第一個字母......(?)

通過保存先前檢測每個單詞的第一個字母字符。讓一個單詞與1)<white-space><Letter>的任何順序或2)如果第一個字符是一個字母。

其他問題:EOF檢測太遲。檢查EOF之後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; 

總之

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

假設你真的想這樣做的每一個空間讀取(您的getch()有假設的理由)後等待,那麼你可以嘗試I = 0之前,您這樣循環設置。然後,如果(i == 0),那麼chr = toupper(chr)並增加i。最後,在if(chr =='')再次包含i = 0。另外,如果您想考慮其他間距字符(換行符,製表符等),那麼您應該使用include <ctype.h>並使用isspace()函數,如if(isspace(chr))而不是if(chr == ' ')

2

這應該做的伎倆

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你是對的 – man

相關問題