Я получаю неожиданное значение при использовании функции isalpha() в C++

Вопрос или проблема

Я пишу программу, чтобы подсчитать, сколько букв, цифр и специальных символов содержится в строке, но столкнулся с проблемой при подсчете букв.

#include <iostream>
#include <iomanip>
#include <string>

using namespace std;

int main()
{
    string sentence;
    int numbers,
        letters, 
        other;

    cout << "Пожалуйста, введите предложение: ";
    getline(cin, sentence);

    for(int j = 0; j < sentence.length(); j++)
    {
        if(isalpha(sentence[j])){
            letters++;
        }
        else if(isdigit(sentence[j])){
            numbers++;
        }
        else{
            other++;
        }
    }
    cout << "Количество букв: " << letters << endl;
    cout << "Количество цифр: " << numbers << endl;
    cout << "Количество всего остального: " << other << endl;

    return 0;
}

Это мой код, все остальное, похоже, работает нормально. Моя проблема в том, что по какой-то причине подсчет букв начинается с 26 и продолжает увеличиваться. Есть ли что-то не так с другими частями моего кода, что могло бы вызвать эту проблему, или я просто неправильно использую функцию?

Единственное, что я могу предположить, это то, что он считает каждую букву в алфавите, а затем идет дальше, потому что почему, по всей видимости, он начинает с 26? Буду благодарен за любую помощь!

Проблема, с которой вы столкнулись, заключается в том, что переменные letters (а также numbers и other) не инициализированы. В C++, если вы не инициализируете эти переменные, они могут иметь непредсказуемые (мусорные) значения, что может объяснить, почему подсчет начинается с 26.

Чтобы это исправить, вы должны инициализировать numbers, letters и other в 0 в начале программы. Вот исправленная версия вашего кода:

#include <iostream>
#include <iomanip>
#include <string>

using namespace std;

int main()
{
    string sentence;
    int numbers = 0,    // Инициализируйте переменные в 0
        letters = 0, 
        other = 0;

    cout << "Пожалуйста, введите предложение: ";
    getline(cin, sentence);

    for(int j = 0; j < sentence.length(); j++)
    {
        if(isalpha(sentence[j])){
            letters++;
        }
        else if(isdigit(sentence[j])){
            numbers++;
        }
        else{
            other++;
        }
    }
    cout << "Количество букв: " << letters << endl;
    cout << "Количество цифр: " << numbers << endl;
    cout << "Количество всего остального: " << other << endl;

    return 0;
}

Инициализировав переменные в 0, вы гарантируете, что подсчет начинается корректно с нуля, и ваша программа теперь должна правильно подсчитывать буквы, цифры и специальные символы.

Ответ или решение

Ваш вопрос касается неожиданного значения при использовании функции isalpha() в C++. Проблема, с которой вы столкнулись, связана с инициализацией переменных, которые вы используете для подсчета букв, цифр и специальных символов в строке.

В вашем коде переменные numbers, letters и other не инициализированы. В C++ если переменные не инициализированы, они могут содержать неопределенные (смешанные) значения, которые объясняют, почему счетчик букв начинает с 26.

Чтобы исправить эту проблему, вам нужно инициализировать переменные numbers, letters и other нулем в начале вашей программы. Вот исправленная версия вашего кода:

#include <iostream>
#include <iomanip>
#include <string>

using namespace std;

int main()
{
    string sentence;
    int numbers = 0,    // Инициализация переменных
        letters = 0, 
        other = 0;

    cout << "Пожалуйста, введите предложение: ";
    getline(cin, sentence);

    for(int j = 0; j < sentence.length(); j++)
    {
        if(isalpha(sentence[j])){
            letters++;
        }
        else if(isdigit(sentence[j])){
            numbers++;
        }
        else{
            other++;
        }
    }
    cout << "Количество букв: " << letters << endl;
    cout << "Количество цифр: " << numbers << endl;
    cout << "Количество всего остального: " << other << endl;

    return 0;
}

Теперь, когда переменные инициализированы, ваша программа будет правильно начинать подсчет с нуля, и вы сможете точно подсчитывать количество букв, цифр и специальных символов в введенной строке.

Если у вас останутся какие-либо вопросы или появятся дополнительные проблемы, не стесняйтесь обращаться за помощью.

Оцените материал
Добавить комментарий

Капча загружается...