C:计算文件中大小写字母的数量

时间:2016-01-12 23:29:38

标签: c file uppercase lowercase

我正在尝试从文件中读取文本,然后写入另一个文件中有多少个大写和小写字符,以及有多少个数字。

double

但是,当我运行它时,它只是“崩溃”并且不会在output.txt文件中写入任何内容。

我错过了什么?

1 个答案:

答案 0 :(得分:2)

由于您要比较字符,因此最简单的情况是使用面向字符的输入。该库提供了几个面向字符的输入函数(例如getchar()(从stdin读取)或getcfgetc读取{{{ 1}})。这可以防止您在阅读后逐步检查每个字符串。

使用您的方法的简短示例如下。唯一的调整是包含一个三元运算符,它可以读取/写入作为程序参数给出的文件名(如果没有给出文件名,则来自默认的FILE* streamstdin)。它只是防止硬编码文件中的文件名。要在stdoutinput.txt上使用该计划,只需将该计划称为output.txt

./programname input.txt output.txt

示例输入文件

#include <stdio.h>

int main (int argc, char **argv)
{
    int p, caps, low, num;
    p = caps = low = num = 0;

    FILE *fin, *fout;

    /* read from filename argv[1] (default: stdin), 
       write to  filename argv[2] (default: stdout) */
    fin  = argc > 1 ? fopen (argv[1], "r") : stdin;
    fout = argc > 2 ? fopen (argv[2], "w") : stdout;

    if (fin == NULL) {
        fprintf (stderr, "input file open failed.\n");
        return 1;
    }
    if (fout == NULL) {
        fprintf (stderr, "output file open failed.\n");
        return 1;
    }

    while ((p = fgetc (fin)) != EOF)
    {
        if ('a' <= p && p <= 'z') low++;         
        if ('A' <= p && p <= 'Z') caps++;  
        if ('0' <= p && p <= '9') num++;                               
    }

    fprintf (fout, "\n Lower: %d, Caps: %d, Numbers: %d\n\n", low, caps, num);

    if (fin  != stdin)  fclose(fin);
    if (fout != stdout) fclose(fout);

    //system("pause");   

    return 0;   
}

输出(读取/写入默认stdin / stdout)

$ cat ../dat/captnjack.txt
This is a tale
Of Captain Jack Sparrow
A Pirate So Brave
On the Seven Seas.

如果您还有其他问题,请与我们联系。