程序使用Coleman-Liau索引。它旨在输出理解该文本所需的(美国)年级水平。公式是:
指数= 0.0588 * L-0.296 * S-15.8
当我输入诸如hello there
之类的简单文本时,我的成绩等级较高,但是如果输入较复杂的文本,则我的成绩等级较低。
#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <math.h>
float letter = 0;
float word = 1;
float sentence = 0;
int main(void)
{
string text = get_string("Text: ");
for (int i = 0; i < strlen(text); i++)
{
if ((text[i] >= 'a' && text[i] <= 'z') || (text[i] >= 'A' && text[i] <= 'Z'))
{
letter++;
}
else if (text[i] == ' ')
{
word++;
}
else if (text[i] == '.' || text[i] == '!' || text[i] == '?')
{
sentence++;
}
}
printf("Letter:%f, Word:%f, Sentence:%f\n", letter, word, sentence);
float L = letter/word * 100;
float S = sentence/word * 100;
float x = (0.0588 * L) - (0.296 * S) - 15.8;
if (x < 16 && x >= 0)
{
printf("Grade Level: %i",(int) round(x));
}
else if (x > 16)
{
printf("Grade Level: 16+");
}
else
{
printf("Before Grade 1");
}
答案 0 :(得分:0)
如果要计算字母,则应检查字符是否为字母。 C中有一个内置函数(在ctype.h库中)
isalpha() //the function returns non-zero if character is alphabetic.
要对单词计数,需要检查字符是否为空白。在同一个库中,可以使用以下函数进行检查。
isblank() //the function returns non-zero if character is blank.
可能是您计算字母的功能无法正常工作。我将打印字母,单词,句子的数量,以查看您的代码是否正常运行。然后,计算索引。