Как идентифицировать строку, содержащую только число? - PullRequest
1 голос
/ 23 октября 2019

Как напечатать только текст в строке? Я хочу напечатать только abc из.

string numtext = "abc123";

Вот полный код:

#include <stdio.h>

int main()
{
    string text = "abc123";

    if (text.matches("[a-zA-Z]") //get an error initialization makes integer from pointer without a cast
    {
        printf("%s", text);
    }
    getch();
}

Моя строка содержит как цифры, так и буквы, и я хочу печатать только буквы. Но я получаю ошибку. Что я делаю не так?

Ответы [ 4 ]

0 голосов
/ 23 октября 2019

Этот вывод на печать всех совпадений в строке:

#include <iostream>
#include <regex>

int main()
{
    std::string numtext("abc123");
    std::regex e("[a-zA-Z]+");
    std::smatch match;

    while (std::regex_search(numtext, match, e))
    {
        std::cout << match.str() << std::endl;
        numtext = match.suffix();
    }

    return 0;
}
0 голосов
/ 23 октября 2019

Прежде всего, в стандартной библиотеке строк для этого случая нет функции-члена с именем std::string::matches .

Во-вторых, заголовок вопроса не совпадает с вопросом, который вы задали с кодом. Однако я постараюсь разобраться с обоими. ;)


Как напечатать только текст в строке?

Вы можете просто напечатать каждый элемент в строке (например, char s), если онэто алфавит, итерируя по нему. Проверка может быть выполнена с использованием стандартной функции std::isalpha из заголовка <cctype>. ( См. Живой пример здесь )

#include <iostream>
#include <string>
#include <cctype> // std::isalpha

int main()
{
    std::string text = "abc123";

    for(const char character : text)
        if (std::isalpha(static_cast<unsigned char>(character)))
            std::cout << character;
}

Выход :

abc

Как определить, строка содержит только число ?

Предоставить функцию, которая проверяет все символы в строке, являются ли они цифрами. Для этого вы можете использовать стандартный алгоритм std::all_of (необходимо включить заголовок <algorithm>) вместе с std::isdigit (из заголовка <cctype>). ( См. Живой пример онлайн )

#include <iostream>
#include <string>
#include <algorithm> // std::all_of
#include <cctype>    // std::isdigit
#include <iterator>  // std::cbegin, std::cend()

bool contains_only_numbers(const std::string& str)
{
    return std::all_of(std::cbegin(str), std::cend(str),
        [](char charector) {return std::isdigit(static_cast<unsigned char>(charector)); });
}

int main()
{
    std::string text = "abc123";
    if (contains_only_numbers(text))
        std::cout << "String contains only numbers\n";
    else 
        std::cout << "String contains non-numbers as well\n";
}

Выход :

String contains non-numbers as well
0 голосов
/ 23 октября 2019

Использование стандарта C ++ regex для таких сценариев - хорошая идея. Вы можете настроить много.

Ниже приведен простой пример.

#include <iostream>
#include <regex>

int main()
{

    std::regex re("[a-zA-Z]+");

    std::cmatch m;//TO COLLECT THE OUTPUT
    std::regex_search("abc123",m,re);


   //PRINT THE RESULT 
    std::cout << m[0] << '\n';
}
0 голосов
/ 23 октября 2019

Вы можете использовать find_last_not_of функцию std::string и создать substr

std::string numtext = "abc123"; 
size_t last_character = numtext.find_last_not_of("0123456789");
std::string output = numtext.substr(0, last_character + 1);

Это решение просто предполагает, что numtext всегда имеет шаблон text+num, что-то означаеткак ab1c23 даст output = "ab".

...