鱼C论坛

 找回密码
 立即注册
查看: 445|回复: 3

文件

[复制链接]
发表于 2024-10-12 19:40:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
用C语言实现以下内容
1.创建一个文件,定义一个缓存数组,把数组内容写入到文件,在从文件读取出数据,并判断文件中的字符数量,单词数量,行数量,文件使用标准I/O
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-10-12 19:40:52 | 显示全部楼层
好的,我们可以使用C语言中的标准I/O函数来实现这个功能,包括创建文件、写入数据、读取数据以及统计字符、单词和行数。下面是一个简单的实现示例:

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

  3. #define FILENAME "example.txt"

  4. void write_to_file(const char *filename, const char *content) {
  5.     FILE *file = fopen(filename, "w");
  6.     if (file == NULL) {
  7.         perror("无法创建文件");
  8.         return;
  9.     }
  10.     fputs(content, file);
  11.     fclose(file);
  12. }

  13. void read_and_analyze_file(const char *filename) {
  14.     FILE *file = fopen(filename, "r");
  15.     if (file == NULL) {
  16.         perror("无法打开文件");
  17.         return;
  18.     }

  19.     int char_count = 0, word_count = 0, line_count = 0;
  20.     char c;
  21.     char previous = '\0';

  22.     while ((c = fgetc(file)) != EOF) {
  23.         char_count++;

  24.         if (c == '\n') {
  25.             line_count++;
  26.         }

  27.         if (isspace(c) && !isspace(previous)) {
  28.             word_count++;
  29.         }

  30.         previous = c;
  31.     }

  32.     if (!isspace(previous)) {
  33.         word_count++;
  34.     }

  35.     if (char_count > 0 && previous != '\n') {
  36.         line_count++;
  37.     }

  38.     fclose(file);

  39.     printf("字符数量: %d\n", char_count);
  40.     printf("单词数量: %d\n", word_count);
  41.     printf("行数量: %d\n", line_count);
  42. }

  43. int main() {
  44.     const char *content = "Hello, FishC!\nWelcome to learning C programming.\nEnjoy coding!";
  45.     write_to_file(FILENAME, content);
  46.     read_and_analyze_file(FILENAME);
  47.     return 0;
  48. }
复制代码


### 代码说明:
1. **`write_to_file`**:这个函数用于创建文件并写入给定的字符串内容。
2. **`read_and_analyze_file`**:该函数读取文件中的内容,并通过检查字符来统计字符数、行数和单词数(通过检测空白字符的变化判定单词)。
3. **`main`**:在`main`函数中,首先将内容写入文件,然后读取并分析文件。

注意:此代码处理简单文本,忽略了一些特例(如多行行末未终止换行符等),实际使用中可以根据需要进行更详细的处理。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-10-12 19:43:21 | 显示全部楼层
FishC 发表于 2024-10-12 19:40
好的,我们可以使用C语言中的标准I/O函数来实现这个功能,包括创建文件、写入数据、读取数据以及统计字符、 ...

不使用ctype.h库中的函数使用字符码判断
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-10-12 19:43:28 | 显示全部楼层
轻语远歌 发表于 2024-10-12 19:43
不使用ctype.h库中的函数使用字符码判断


好的,我们可以通过字符的ASCII码来判断,而不是使用`<ctype.h>`库。ASCII码中空白字符(例如空格、制表符、换行符等)的范围在33到126之外,我们可以利用这个知识来区分字符。下面是更新后的代码:

  1. #include <stdio.h>

  2. #define FILENAME "example.txt"

  3. // 判断字符是否为空白字符(空格、制表符或换行符)
  4. int is_space(char c) {
  5.     return c == ' ' || c == '\t' || c == '\n';
  6. }

  7. void write_to_file(const char *filename, const char *content) {
  8.     FILE *file = fopen(filename, "w");
  9.     if (file == NULL) {
  10.         perror("无法创建文件");
  11.         return;
  12.     }
  13.     fputs(content, file);
  14.     fclose(file);
  15. }

  16. void read_and_analyze_file(const char *filename) {
  17.     FILE *file = fopen(filename, "r");
  18.     if (file == NULL) {
  19.         perror("无法打开文件");
  20.         return;
  21.     }

  22.     int char_count = 0, word_count = 0, line_count = 0;
  23.     char c;
  24.     char previous = '\0';

  25.     while ((c = fgetc(file)) != EOF) {
  26.         char_count++;

  27.         if (c == '\n') {
  28.             line_count++;
  29.         }

  30.         if (is_space(c) && !is_space(previous) && previous != '\0') {
  31.             word_count++;
  32.         }

  33.         previous = c;
  34.     }

  35.     if (!is_space(previous) && previous != '\0') {
  36.         word_count++;
  37.     }

  38.     if (char_count > 0 && previous != '\n') {
  39.         line_count++;
  40.     }

  41.     fclose(file);

  42.     printf("字符数量: %d\n", char_count);
  43.     printf("单词数量: %d\n", word_count);
  44.     printf("行数量: %d\n", line_count);
  45. }

  46. int main() {
  47.     const char *content = "Hello, FishC!\nWelcome to learning C programming.\nEnjoy coding!";
  48.     write_to_file(FILENAME, content);
  49.     read_and_analyze_file(FILENAME);
  50.     return 0;
  51. }
复制代码


### 代码说明:
- **`is_space` 函数**:用于判断一个字符是否为空白字符。我们手动定义了这个函数,通过比较字符是否是空格(`' '`)、制表符(`\t`)或换行符(`\n`)来判断它是否为空白。
  
这个版本的代码不依赖`<ctype.h>`中的功能,通过ASCII码的比较来实现相同的功能。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-8 00:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表