没有合适的从 std::string 到 int 的转换
no suitable conversion from std::string to int
我试图使用标准 C 库的一些函数,但出现此错误:没有从 std::string 到 int 的合适转换。我刚刚从C开始学习C++,请不要用难懂的术语过度解释这个东西。
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
int main(void)
{
string s1{ "Hello" };
bool what{ isalnum(s1) };
return 0;
}
isalnum
告诉您单个字符(而不是整个字符串)是否为字母数字。
如果要检查字符串是否为字母数字,则需要使用循环查看每个字符:
bool what = true;
for (unsigned char ch : s1) {
if (!std::isalnum(ch)) {
what = false;
break;
}
}
或算法:
#include <algorithm>
bool what = std::all_of(s1.begin(), s1.end(),
[](unsigned char ch){return std::isalnum(ch);});
正如评论中提到的,使用字符分类功能时,即使看起来很简单,也有很多复杂性和死亡陷阱。我认为我的示例避免了其中的大部分,但请谨慎行事。
我发布这个是为了让 C++ 方法也在这里。我更喜欢这种方式,因为它对全局状态的依赖性较小
std::locale locale; // grab the current global locale locally, may lock
bool what = true;
for (auto ch : s1) {
if (!std::isalnum(ch, locale)) {
what = false;
break;
}
}
及算法方式:
#include <algorithm>
#include <locale>
#include <functional>
std::locale locale; // grab the current global locale locally, may lock
auto isalnum = std::bind(std::isalnum<char>, std::placeholders::_1, locale);
bool what = std::all_of(s1.begin(), s1.end(), isalnum);
注意:您必须将 std::isalnum
模板专门化为 char
,否则 std::bind
也不知道它绑定了什么。
我试图使用标准 C 库的一些函数,但出现此错误:没有从 std::string 到 int 的合适转换。我刚刚从C开始学习C++,请不要用难懂的术语过度解释这个东西。
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
int main(void)
{
string s1{ "Hello" };
bool what{ isalnum(s1) };
return 0;
}
isalnum
告诉您单个字符(而不是整个字符串)是否为字母数字。
如果要检查字符串是否为字母数字,则需要使用循环查看每个字符:
bool what = true;
for (unsigned char ch : s1) {
if (!std::isalnum(ch)) {
what = false;
break;
}
}
或算法:
#include <algorithm>
bool what = std::all_of(s1.begin(), s1.end(),
[](unsigned char ch){return std::isalnum(ch);});
正如评论中提到的,使用字符分类功能时,即使看起来很简单,也有很多复杂性和死亡陷阱。我认为我的示例避免了其中的大部分,但请谨慎行事。
我发布这个是为了让 C++ 方法也在这里。我更喜欢这种方式,因为它对全局状态的依赖性较小
std::locale locale; // grab the current global locale locally, may lock
bool what = true;
for (auto ch : s1) {
if (!std::isalnum(ch, locale)) {
what = false;
break;
}
}
及算法方式:
#include <algorithm>
#include <locale>
#include <functional>
std::locale locale; // grab the current global locale locally, may lock
auto isalnum = std::bind(std::isalnum<char>, std::placeholders::_1, locale);
bool what = std::all_of(s1.begin(), s1.end(), isalnum);
注意:您必须将 std::isalnum
模板专门化为 char
,否则 std::bind
也不知道它绑定了什么。