C++ 转换向量<;int>;分隔字符串
正如我所看到的,有一种快速而简短的方法可以将向量转换为用c#中的字符分隔的字符串: 我想知道C++中有没有同样的方法来做这个?< /P>C++ 转换向量<;int>;分隔字符串,c++,string,vector,C++,String,Vector,正如我所看到的,有一种快速而简短的方法可以将向量转换为用c#中的字符分隔的字符串: 我想知道C++中有没有同样的方法来做这个?< /P> #include <sstream> #include <string> #include <vector> #include <iterator> #include <iostream> int main() { std::vector<int> data = {42, 1,
#include <sstream>
#include <string>
#include <vector>
#include <iterator>
#include <iostream>
int main()
{
std::vector<int> data = {42, 1, 2, 3, 4, 5};
std::ostringstream oss;
std::copy(data.begin(), data.end(), std::ostream_iterator<int>(oss, ";"));
std::string result( oss.str() );
std::cout << result << "\n";
}
可通过中的std::acculate
写入:
std::vector data={42,1,2,3,4,5};
std::ostringstream out;
如果(!v.empty())
{
std::copy(v.begin(),v.end()-1,std::ostream_迭代器(out,“;”);
不,如果你是那个意思的话,std::string
,就没有了!@Robᵩ 我错过了#include
)+1如果您将输入和结果变量命名为类似于OP的:std::vector data
和std::string result
,可能会有助于教学法。遗憾的是,后面可能没有分号。@DietmarKühl是的,但我无法想出一个类似的简单解决方法摆脱它。我在想类似于std::string s=v.empty()?std::string{“”}:std::accumulate(v.begin()+1,v.end(),v.front(),[](std::string const&s,int I){返回s+“;+std::to_string(I);
#include <sstream>
#include <string>
#include <vector>
#include <iterator>
#include <iostream>
int main()
{
std::vector<int> data = {42, 1, 2, 3, 4, 5};
std::ostringstream oss;
std::copy(data.begin(), data.end(), std::ostream_iterator<int>(oss, ";"));
std::string result( oss.str() );
std::cout << result << "\n";
}
using std::begin;
using std::end;
std::copy(begin(data), end(data), std::ostream_iterator<int>(oss, ";"));
std::string s;
for(auto const& e : v) s += std::to_string(e) + ";";
std::string s = std::accumulate(begin(v), end(v), std::string{},
[](std::string r, int p){ return std::move(r) + std::to_string(p) + ";"; });
std::vector<int> data = {42, 1, 2, 3, 4, 5};
std::ostringstream out;
if (!v.empty())
{
std::copy(v.begin(), v.end() - 1, std::ostream_iterator<int>(out, ";"));
out << v.back();
}
std::string result( out.str() );
std::cout << result << "\n";