2013-10-31 103 views
0

首先每一個字符,對不起,我不擅長使用英語存儲從文本文件

這是我的輸出

you just read : abcdefg4523 hij 

you just read : 234kl monp 

you just read : qrs tuv 

you just read : wx 452 z 

This file have 4 alphabets 

最後行計數線我不是

我想算只有字母表和我的輸出將打印「此文件有26個字母」(請參閱​​我的文件底部)

#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
#define INPUT "file.txt" 
#define MAX 1024 
int main(void) 
{ 
    FILE *pIn; 
    int count = 0 ; 
    char inputBuffer[MAX]; 
    char alphabet[MAX]; 
    pIn=fopen(INPUT,"r"); 
    while (fgets(inputBuffer,sizeof(inputBuffer),pIn) != NULL) 
    { 
     printf("you just read : %s",inputBuffer); 
     count++; 
    } 
    fclose(pIn); 
    printf("\nThis file have %d alphabets\n",count); 
    return 0; 

} 

關於我的FILE.TXT:

abcdefg4523 hij 

234kl monp 

qrs tuv 

wx 45y2 z 
+0

傑出。請確定並提示您的服務器。 – WhozCraig

+0

如果你希望某人明白你想要什麼,你需要改進這個英語。 – Havenard

+0

#對此感到遺憾。我是南亞,我會提高我的英語:) – Barbiyong

回答

0

我明白了@Barbiyong。您想要統計您傳遞的輸入文件中的字母字符數。但是爲了這個功能,你爲什麼要使用fgets()函數?正如函數名稱本身所說的那樣,它將以字符串形式讀取輸入並將其輸出。還有另外一個叫做fgetc()的函數。請參閱下面的代碼以瞭解您的理解並進行相應的更改。

c=fgetc(pIn); 
if isaplpha(c) 
{ 
    printf("Encountered alphabet:%c",char(c)); 
    count++; 
} 
0

你可以使用getc() or fgetc()並檢查是否isalpha()

int c; 
size_t count = 0; 

... 

c = fgetc(filehandle) 
if (isalpha(c)) 
    ++count; 

如果輸入可以是寬字節,你可以使用fgetwc()而不是由iswalpha()檢查。

然後,你還必須確保locale is set

setlocale(LC_ALL, ""); 

或者你可以檢查的高位,如果你只想計算所有字符的長度。

if ((c & 0xc0) != 0x80) 
    ... 

另一種方法可能是使用一個數組來收集統計數據,並計算/事後檢查的事情。

E.g. (ASCII only):

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

void print_stats(unsigned int cc[256]) 
{ 
    int i; 
    size_t sum = 0; 

    fprintf(stdout, 
     "----------------\n" 
     "Stats all bytes:\n" 
     "----------------\n" 
    ); 
    for (i = 0; i < 256; ++i) { 
     sum += cc[i]; 
     if (cc[i]) { 
      if (isprint(i)) 
       fprintf(stdout, "%c : %d\n", i, cc[i]); 
      else 
       fprintf(stdout, "0x%02x: %d\n", i, cc[i]); 

     } 
    } 
    fprintf(stdout, "Total: %u bytes.\n", sum); 
} 

void print_stats_alpha(unsigned int cc[256]) 
{ 
    int i; 
    size_t sum = 0; 

    fprintf(stdout, 
     "------------------\n" 
     "Stats alpha bytes:\n" 
     "------------------\n" 
    ); 
    for (i = 0; i < 256; ++i) { 
     if (cc[i] && isalpha(i)) { 
      sum += cc[i]; 
      fprintf(stdout, 
       "%c: %d\n", 
       (char)i, cc[i] 
      ); 
     } 
    } 
    fprintf(stdout, "Total: %u alpha bytes.\n", sum); 
} 

int main(int argc, char *argv[]) 
{ 
    FILE *fh; 
    unsigned int cchar[256] = {0}; 
    int c; 

    if (argc == 1) { 
     fprintf(stderr, "Usage: %s <file>\n", argv[0]); 
     return 1; 
    } 

    if (!(fh = fopen(argv[1], "r"))) { 
     perror(argv[1]); 
     return 1; 
    } 


    while ((c = getc(fh)) != EOF) { 
     ++cchar[c]; 
    } 

    fclose(fh); 

    print_stats(cchar); 

    print_stats_alpha(cchar); 

    return 0; 
}