如何识别字符串只包含数字?

How to identify string is containing only number?

如何只打印字符串中的文本?我只想打印 abc from.

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();
}

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

您可以使用 std::stringfind_last_not_of 函数并创建 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".

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

其次,题名与你问的问题代码不符。但是,我会尝试处理两者。 ;)


How to print only text in a string?

你可以简单地打印字符串中的每个元素(即 char s),如果它是一个字母表,同时遍历它。可以使用名为 std::isalpha, from the header <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

How to identify string is containing only number?

提供一个函数来检查字符串中的所有字符是否为数字。您可以使用标准算法 std::all_of (needs header <algorithm> to be included) along with std::isdigit (from <cctype> header) for this. (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

在这种情况下使用 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';
}