读取文件,并统计字母数、空格数、数字数

源代码:

  1 /*
  2  * FILE: p43_count.c
  3  * DATE: 20180106
  4  * --------------
  5  * DESCRIPTION: 读取文件,并统计字母数、空格数、数字数
  6  */
  7 
  8 #include <stdio.h>
  9 #include <stdlib.h>     // exit
 10 
 11 #define BUFFSIZE 128
 12 
 13 int main(void)
 14 {
 15         FILE *fp;
 16         char buf[BUFFSIZE];
 17         int letter=0, blank=0, number=0;
 18         int len;    
 19 
 20         fp = fopen("temp.txt", "r");
 21         if(fp == NULL)
 22         {
 23                 perror("ERROR: fopen");
 24                 exit(1);
 25         }
 26         while((len=fread(buf, sizeof(char), BUFFSIZE-1, fp)) > 0)
 27         {
 28                 int i;
 29                 for(i=0; i<len; i++)
 30                 {
 31                         if((buf[i]>='a' && buf[i]<='z') || (buf[i]>='A' && buf[i]<='Z'))
 32                                 letter++;
 33                         else if(buf[i] == ' ')
 34                                 blank++;
 35                         else if(buf[i]>='0' && buf[i]<='9')
 36                                 number++;
 37                 }
 38         }
 39         printf("letter %d, blank %d, number %d\n", letter, blank, number);
 40         fclose(fp);
 41         return 0;
 42 }
编译执行:


  1 /*
  2  * FILE: p676_count.c
  3  * DATE: 20180125
  4  * ==============
  5  * DESCRIPTION: 统计一个目录下每个文件的字母、空格、数字数,
  6  * 并将所有文件输出到一个文件中
  7  */
  8 
  9 #include <stdio.h>
 10 #include <stdlib.h>
 11 #include <sys/stat.h>   // stat
 12 #include <string.h>
 13 
 14 #define DEBUG(format, ...) printf("FILE: "__FILE__", LINE: %d, "format"\n", __LINE__, ##__VA_ARGS__)
 15 
 16 #define MINBUFFSIZE 128
 17 #define MAXBUFFSIZE 256 
 18 
 19 int main(int argc, char *argv[])
 20 {
 21         FILE *fp, *fp_out, *fp_in;
 22         struct stat buf_stat;
 23         char filename[32];
 24 
 25         fp_out = fopen("/home/trb331617/combination.txt", "wb");
 26         // 使用system函数执行ls命令
 27         system("ls > temp.txt");
 28         fp = fopen("temp.txt", "r");
 29         while(fgets(filename, 32, fp) != NULL)
 30         {           
 31                 int n = strlen(filename);
 32                 filename[n-1] = '\0';
 33                 if(strcmp(filename, "build") == 0)
 34                         continue;
 35                 int buffsize = MINBUFFSIZE;
 36                 
 37                 stat(filename, &buf_stat);
 38                 if(S_ISDIR(buf_stat.st_mode))
 39                         continue; 
 40              
 41                 if(buf_stat.st_size > buffsize)
 42                         buffsize = MAXBUFFSIZE;
 43                 char *buf = (char *)malloc(sizeof(char) * buffsize);
 44                 int len;
 45                 int letter = 0, space = 0, number = 0;
 46                 fp_in = fopen(filename, "r");
 47                 DEBUG("=== %s", filename);
 48                 while((len=fread(buf, sizeof(char), buffsize-1, fp_in)) > 0)
 49                 {
 50                         fwrite(buf, sizeof(char), len, fp_out);
 51                         char *p = buf;
 52                         buf[len-1] = '\0';
 53                         while(*p != '\0')
 54                         {
 55                                 if((*p>='a' && *p<='z') || (*p>='A' && *p<='Z'))
 56                                         letter++;
 57                                 else if(*p == ' ')
 58                                         space++;
 59                                 else if(*p>='0' && *p<='9')
 60                                         number++;
 61                                 p++;
 62                         }
 63                 }
 64                 fprintf(stdout, "%s: letter %d, space %d, number %d\n", filename, letter, space, number);
 65                 fclose(fp_in);
 66                 free(buf);
 67         }
 68         fclose(fp);
 69         fclose(fp_out);
 70         unlink("temp.txt");     //删除该文件
 71         return 0;
 72 }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值