[英]6 IntelliSense: no suitable conversion function from “std::string” to “int” exists
[英]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
也不知道它的綁定是什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.