我有數字的在C++中的字符串:像字符串str =「1234567012」C++:如何將一個字符串對象複製到一個int數組?
我希望該複製到一個int數組,使得數組的每個元素將具有一個數字。現在我可以使用一個迭代器,並且每次迭代一個並使用
static_cast<int>(*iter)
。但是有沒有更簡單直接的方法?我想重新將int數組複製到字符串數組。
請幫助我以上2個步驟。
我有數字的在C++中的字符串:像字符串str =「1234567012」C++:如何將一個字符串對象複製到一個int數組?
我希望該複製到一個int數組,使得數組的每個元素將具有一個數字。現在我可以使用一個迭代器,並且每次迭代一個並使用static_cast<int>(*iter)
。但是有沒有更簡單直接的方法?我想重新將int數組複製到字符串數組。
請幫助我以上2個步驟。
可以使用std::transform
功能:
std::vector<int> ints(str.size());
std::transform(str.begin(), str.end(), ints.begin(),
[](char c) { return c - '0'; });
如果你的編譯器不支持lambda表達式是,你可以使用常規的功能:
int get_digit(char c) { return c - '0'; }
// ...
std::transform(str.begin(), str.end(), ints.begin(), get_digit);
做相反的操作,就可以做類似:
std::string s(ints.size(), 0);
std::transform(ints.begin(), ints.end(), s.begin(),
[](int i) { return i + '0'; });
啊..感謝很多。你可以幫助最後的語法:'[](char c){return c - '0'; }' – kingsmasher1
這是一個lambda。它基本上是一個匿名函數。這是C++ 11中的一項新功能,它在一些編譯器中已經得到支持。我添加了一個替代品,如果你不能使用它。這兩個片段是相同的。 –
Ahhh我現在明白了......謝謝一噸:) – kingsmasher1
類似這樣的:
std::vector<int> v;
v.reserve(str.size());
for (char c : str) { v.push_back(c - '0'); }
//...
string s;
for (int i : v) { s += i + '0'; }
對不起,先前的一個更好。你能幫我用for循環嗎?之前從未遇到過這種語法。 – kingsmasher1
for循環中的'char c:str'是什麼意思? – kingsmasher1
@ kingsmasher1:這是一個「基於範圍的語句」,可在C++ 11中找到。它看起來確實如此。 –
誰downvoted?認爲它是一個非編程問題:-) – kingsmasher1