CS50 Читаемость Pset2 - PullRequest
       5

CS50 Читаемость Pset2

0 голосов
/ 02 февраля 2020

У меня проблемы с получением моего кода для правильного подсчета количества букв в строке. Мой код все еще считает пробелы, даже если функция, которую я вызвал ниже, проверяет только символы алфавита c, в которых он все еще считает пробелы. Если я набираю Hello World, то считается 11 букв, хотя присутствуют только 10 букв

isalpha () проверяет наличие алфавита c; в стандартной локали "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");


}

1 Ответ

3 голосов
/ 02 февраля 2020

Следующий оператор if в вашем l oop:

if(input[isalpha(i)])

будет использовать результат isalpha(i) в качестве индекса в массиве input и оценивать его значение. Скорее всего, вместо этого вы хотели бы оценить результат функции isalpha(), вызванной с символом i в строке, т.е.

if(isalpha(input[i]))
...