CS50可读性Pset2

时间:2020-02-02 03:09:41

标签: c cs50

我无法让我的代码正确地计算字符串中的字母数,我的代码仍在计算空格,即使我在下面调用的函数仅检查字母字符仍在计算空格。如果我输入“ Hello World”,即使只有10个字母也算11个字母

isalpha() 检查字母字符;在标准“ C”语言环境中,它等效于(isupper(c)|| islower(c))。在某些语言环境中,可能还存在isalpha()为true的其他字符-既不大写也不小写的字母。

在这里输入我的代码

#include <stdio.h>
#include <math.h>
#include <cs50.h>
#include <ctype.h>
#include <string.h>

int main(void)
{
    //gets user input
    string input = get_string("Text: ");
    //counter for the number of letters
    int numLetters = 0;

    //looks at each character in the string
    for(int i = 0, n = strlen(input); i < n; i++)
    {
        //checks to see if the characeter is in the alphabet
        if(input[isalpha(i)])
        {
            //add to the number of letters in the string
            numLetters++;
        }


    }
    printf("letter(s) %i", numLetters);
    printf("\n");


}

2 个答案:

答案 0 :(得分:4)

循环中的以下if语句:

if(input[isalpha(i)])

将使用isalpha(i)的结果作为input数组的索引,并评估其值。 相反,您可能希望评估以字符串中第i个字符(即

)调用的函数isalpha()的结果
if(isalpha(input[i]))

答案 1 :(得分:0)

错误在于您的if语句中,即循环中的一个。应该是:

if (isalpha(input[i]) != 0)
{
  numLetters++;
}

我添加了

!= 0

part的原因是'isalpha'如果是字母字符,则返回正整数,如果不是,则返回零。希望您觉得这有用。