c - 字符串计数问题、浮点整数、基于字母、单词和句子数量的评分公式,在 C 中
问题描述
我正在编写一个程序来生成字母、单词和句子的数量,提供输入文本。
使用这些值,我想根据一个公式生成一个数字(评估“可读性”),其中字母、单词和句子中的数字作为变量。
请参阅此代码的最后一部分(对于等级公式)。
#include <cs50.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
int main(void)
{
char str[1000];
int i=0, chr=0, st=1, sn=0;
printf("Text: ");
fgets(str, sizeof(str), stdin);
for( i = 0; str[i] != '\0' ; i++)
{
chr = chr + 1;
}
printf("%d letters\n", chr);
for (i = 0; i <= chr - 1; i++)
{
if (str[i] == ' ')
{
st = st + 1;
}
}
printf("%d words\n", st);
for (i = 0; i <= chr - 1; i++)
{
if (str[i] == '.' || str[i] == '!' || str[i] == '?')
{
sn = sn + 1;
}
}
printf("%d sentences\n", sn);
double L = (100.0 * chr / st);
double S = (100.0 * sn / st);
double grade = 0.0588 * L - 0.296 * S - 15.8;
if (grade <= 1)
{
printf("Before Grade 1\n");
}
else if (grade < 16)
{
printf("Grade %f\n", round(grade));
}
else
{
printf("Grade 16+\n");
}
}
我不知道为什么等级公式会产生奇怪的结果。
例如,
样本输入:
There are more things in Heaven and Earth, Horatio, than are dreamt of in your philosophy.
样本输出:
92 letters
17 words
1 sentences
Grade 14
字母、单词和句子并不奇怪——它们是意料之中的。14 级很奇怪,因为我期待 9 级。我无法识别模式,只是特征的奇怪可以描述为 Grade 的输出总是大于预期值,对于预期高于 1 级的值。
to continue,
-Expected Grade 10 shows output Grade 16
-Expected Grade 8 shows output Grade 15
-Expected Grade 7 shows output Grade 14
-Expected Grade 5 shows output Grade 11
-Expected Grade 3 shows output Grade 10
-Expected Grade 2 shows output Grade 9
预期在 1 年级之前的文本会产生预期的输出。
等级公式:
指数 = 0.0588 * L - 0.296 * S - 15.8
其中 L 是文本中每 100 个单词的平均字母数,S 是文本中每 100 个单词的平均句子数
总的来说,我不知道为什么成绩公式没有产生预期的输出。
解决方案
我想,你对信的看法是错误的。在你input
有一些空格字符,逗号字符等。所以你需要准确计算这句话中的字母(a,b,c,d,e,f等)的数量。
您可以使用该函数isalpha
来计算字母的数量:
for( i = 0; str[i] != '\0' ; i++)
{
if(isalpha(str[i]))
chr = chr + 1;
}
然后其他for循环计算单词和句子的数量,使用strlen(str)
代替chr - 1
for (i = 0; i < strlen(str); i++)
{
if (str[i] == ' ')
{
st = st + 1;
}
}
printf("%d words\n", st);
for (i = 0; i < strlen(str); i++)
{
if (str[i] == '.' || str[i] == '!' || str[i] == '?')
{
sn = sn + 1;
}
}
当我测试时,我得到了结果:
Text: There are more things in Heaven and Earth, Horatio, than are dreamt of in your philosophy.
72 letters
16 words
1 sentences
Grade 9.000000
推荐阅读
- swift - 设置根视图控制器 iOS 13
- python - 用单个元素替换列表中连续重复元素的函数
- reactjs - 在自定义反应钩子中使用 axios
- flutter - 如何在 Flutter 的 ChildModule 中传递 value 参数?
- c# - 事件后的条带重定向
- c# - 错误 CS0021 无法将带有 [] 的索引应用于类型表达式
- reactjs - 自定义字体 React Native Expo - 分离的字体文件
- c++ - 函数 std::make_shared 的参数太多
- powershell - powershell $var 具有价值,但是在 if 语句中时 - 变为 false
- javascript - 如何运行反应js。视觉工作室代码上的代码