C++

Как разбить слово на цифры и буквы в C++

Чтобы разбить строку на цифры и буквы в C++, пройдите по строке циклом. Для каждого символа проверьте: если это цифра, добавьте в строку digits; если буква — в строку letters

Пример для строки a1b2c3:

#include <cctype>
#include <iostream>
#include <string>

int main() {
    std::string text = "a1b2c3";
    std::string letters;
    std::string digits;

    for (char c : text) {
        unsigned char uc = static_cast<unsigned char>(c);

        if (std::isalpha(uc)) {
            letters += c;
        } else if (std::isdigit(uc)) {
            digits += c;
        }
    }

    std::cout << "Буквы: " << letters << std::endl;
    std::cout << "Цифры: " << digits << std::endl;

    return 0;
}

Вывод:

Буквы: abc
Цифры: 123

Разбор кода

letters хранит найденные буквы:

std::string letters;

digits хранит найденные цифры:

std::string digits;

Цикл проходит по каждому символу строки:

for (char c : text)

Проверка цифры:

std::isdigit(uc)

Проверка буквы:

std::isalpha(uc)

Приведение к unsigned char нужно для корректной работы функций <cctype> с возможными не-ASCII значениями

Вариант с вводом пользователя

#include <cctype>
#include <iostream>
#include <string>

int main() {
    std::string text;
    std::string letters;
    std::string digits;
    std::string other;

    std::cout << "Введите строку: ";
    std::getline(std::cin, text);

    for (char c : text) {
        unsigned char uc = static_cast<unsigned char>(c);

        if (std::isalpha(uc)) {
            letters += c;
        } else if (std::isdigit(uc)) {
            digits += c;
        } else {
            other += c;
        }
    }

    std::cout << "Буквы: " << letters << std::endl;
    std::cout << "Цифры: " << digits << std::endl;
    std::cout << "Остальное: " << other << std::endl;

    return 0;
}

Проверка:

Введите строку: a1-b2!
Буквы: ab
Цифры: 12
Остальное: -!

Что делать с русскими буквами

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

Если задача именно про русский текст, сначала разберитесь с кодировкой и локалью. Для простого алгоритма разделения символов лучше начать с ASCII: a-z, A-Z, 0-9

Если цифры нужно превратить в число

В примерах выше цифры сохраняются как строка. Для a1b2c3 получится 123, но это все еще std::string. Если дальше нужно работать с числом, можно преобразовать строку через std::stoi:

#include <iostream>
#include <string>

int main() {
    std::string digits = "123";

    if (!digits.empty()) {
        int number = std::stoi(digits);
        std::cout << number + 10 << std::endl;
    }

    return 0;
}

Вывод:

133

Проверка !digits.empty() нужна, потому что для строки без цифр преобразовывать будет нечего. В реальном коде также стоит учитывать слишком большие числа и возможные исключения, но для первого учебного примера достаточно не вызывать std::stoi на пустой строке

Если нужно сохранить группы, а не все цифры подряд

Иногда задача другая: из строки ab12cd34 нужно получить не 1234, а две группы 12 и 34. Тогда простой сбор в одну строку уже не подходит. Нужно хранить текущую группу и закрывать ее, когда встречается буква или другой символ. Это отдельное расширение задачи, но базовый принцип тот же: один проход по строке и проверка каждого символа

Частые ошибки

Использовать только if без else if

Лучше писать цепочку:

if (...) {
} else if (...) {
} else {
}

Так один символ попадет только в одну группу

Проверять цифры вручную слишком рано

Можно написать:

if (c >= '0' && c <= '9')

Это работает для ASCII-цифр, но std::isdigit лучше показывает намерение кода

Забыть getline

Если строка может содержать пробелы, используйте std::getline, а не std::cin >> text

Мини-задание

Измените программу так, чтобы она считала количество букв и цифр:

int lettersCount = 0;
int digitsCount = 0;

Для строки abc123x должно получиться:

Букв: 4
Цифр: 3

Что почитать дальше по C++

Если нужен общий маршрут по теме, откройте рубрику C++. Для соседних задач пригодятся эти разборы:

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x