如何识别仅包含数字的字符串?

问题描述 投票:1回答:4

如何仅打印字符串中的文本?我只想从中打印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();
}

我的字符串包含数字和字母,我只想打印字母。但是我得到一个错误。我在做什么错?

c++ algorithm stdstring alphabet
4个回答
0
投票

首先,在这种情况下,没有名为std::string::matches available in the standard string library的成员函数。

第二,问题的标题与您使用代码提出的问题不匹配。但是,我将尝试同时处理两者。 ;)


如何仅打印字符串中的文本?

您可以简单地在字符串中打印每个元素(即char s),如果在迭代过程中它是一个字母。可以使用标题std::isalpha中的标准功能std::isalpha完成检查。 <cctype>

See live example here

输出

#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)以及std::all_of(来自<algorithm>标头)。 std::isdigit

std::isdigit

输出

<cctype>

0
投票

您可以使用See live example online#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

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


0
投票

在这种情况下使用C ++标准text+num是个好主意。您可以自定义很多。

下面是一个简单的示例。

ab1c23

0
投票

此打印中所有匹配的字符串:

output = "ab"
© www.soinside.com 2019 - 2024. All rights reserved.