存储文本文件中的每个字符

时间:2013-10-31 03:16:24

标签: c string file

首先,抱歉,我不擅长使用英语

这是我的输出

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

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

我得到了@Barbiyong的观点。您想要计算要传递的输入文件中的字母字符数。但是对于那个功能,你为什么要使用fgets()函数?正如函数名称本身所说,它将输入作为字符串读取并输出。还有一个名为fgetc()的函数。请参阅以下代码以了解您的理解并相应地进行更改。

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