![](/img/trans.png)
[英]How to convert std::string to std::u32string in C++11?
[英]How to convert u32string to int in C++11?
如何在C ++ 11 u32string
轉換為int
?
另外,我應該使用什么方法將部分字符串轉換為int
- 讓我們說開始和結束迭代器可用?
我試過了:
u32string test=U"14";
cout << atoi(test.c_str());
但它拋出:
candidate function not viable: no known conversion from 'const char32_t *' to 'const char *' for 1st argument
extern int atoi (__const char *__nptr)
#include <locale> // wstring_convert
#include <codecvt> // codecvt_utf8
#include <iostream> // cout
#include <string> // stoi and u32string
int main() {
std::wstring_convert<std::codecvt_utf8<char32_t>, char32_t> convert;
std::u32string str = U"14";
std::cout << std::stoi(convert.to_bytes(str));
}
這取決於UTF-8和使用相同數字表示的“C”語言環境。
GCC的標准庫實現libstdc ++還沒有包含codecvt頭或std :: wstring_convert。 libc ++確實包含了這兩個,Visual Studio的標准庫實現也是如此。 如果你必須使用libstdc ++,你可能會發現自己實現一個簡單的轉換函數是最容易的。
#include <algorithm> // transform
#include <iterator> // begin, end, and back_inserter
std::string u32_to_ascii(std::u32string const &s) {
std::string out;
std::transform(begin(s), end(s), back_inserter(out), [](char32_t c) {
return c < 128 ? static_cast<char>(c) : '?';
});
return out;
}
int u32toi(std::u32string const &s) { return stoi(u32_to_ascii(s)); }
編輯,因為我的第一個答案是愚蠢的。
這是我設法做的,但它可能不是非常有效,它假定你的字符串是有效的。
#include <string>
#include <iostream>
int main()
{
std::u32string str = U"14";
std::string res;
for (auto c = str.begin(); c != str.end(); ++c)
{
char t = *c;
res.push_back(t);
}
std::cout << "\nVal = " << atoi(res.c_str()) << std::endl;
return (0);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.