c - 字数统计程序未从文本文件中检测到双新行
问题描述
好的,只需在 C 中创建一个从 .txt 文件读取的基本字数计数程序,而我只是停留在实际字数计数函数上,没有检测到文件中的双换行符,这是特定的代码位:
while((c = fgetc(file)) != EOF)
{
if(c == ' ')
count++;
if(c == '\n')
count++;
if (c == '\n\n')
count--;
}
printf("words = %d\n", count);
所以只有前两个 if 语句有效,第三个不做任何事情,我希望它减少计数器,因为我不希望双换行符算作一个单词。有谁知道解决方案?我已经搜索了一段时间,但没有找到这个特定的问题。
解决方案
当您遇到双新行时,\n
将if
在每次迭代中触发第二次读取两次,因为fgetc
应该一次只读取一个字符。至于主要问题,通过引入一个额外的标志可以很容易地实现双新行的检测。这种方法可能应该扩展到处理各种单词分隔符。
int was_a_new_line = 1;
while((c = fgetc(file)) != EOF)
{
if(c == '\n')
{
if(!was_a_new_line)
{
was_a_new_line = 1;
count++;
}
}
else
{
was_a_new_line = 0;
if(c == ' ')
{
count++;
}
}
}
推荐阅读
- node.js - CORS 阻止来自 Dockerized React 项目的 API 调用
- android - AWS Cognito - 社交登录选项行为
- git - Github 上的远程分支不允许删除
- json - 当 json 对象键为单个字符长度时,th:text 表达式不计算 json 字符串
- php - PHP中的变量如何存储在类中?
- java - 我怎么知道 JVM 错误已在较新版本中得到解决?
- php - PHP/CSS:简码无法正确显示,并显示在每个页面的头部(内容之前)
- lambda - 无服务器框架的最大策略大小错误
- r - R bfast:stl(Yt,“periodic”)中的错误:系列不是周期性的或少于两个周期
- android - 实际的Android推送消息字符限制?