如何识别字符串只包含数字?
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::string
的 find_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';
}
如何只打印字符串中的文本?我只想打印 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::string
的 find_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';
}