问题
今天遇到一个问题,问题是如何将vectror<char>转换成string类型,编程语言是C++。
后来总结发现有两种方法,接下来结合代码看看二者的优劣。
解决
方法一、直接法
如果最终我们拿到了字符向量数组,那么我们可以使用string一个比较少用的构造函数来完成这个转换工作,具体看代码:
std::vector<char> vec;
std::string str(vec.begin(), vec.end());
这样str就是转换后得到的字符串。
方法二、偷梁换柱法
既然我们最终想要的是string字符串,那么我们最开始的时候是不是可以不使用字符向量数组vectror<char>,而直接使用字符串string呢?当然可以,我们可以利用另一个string的构造函数,具体看代码:
// 如果我们打算使用vec
std::vector<char> vec;
// 可以尝试使用str,size是最终字符串长度,初始化化str,每一位都是字符a
std::string str(size, 'a');
这样初始化后,操作str和vec是差不多的,但是最终的结果就不需要再进行转化了。
总结
上述两种方法其实都是合理利用了string的构造函数,在实际使用过程中,如果能够灵活运行它们会收到事半功倍的效果,自己深有体会。接下来看看string都有那些常见的构造函数方法:
string strs; //构造一个空的字符串
string s(str); //构造一个字符串str的复制品
string s(str, strIndex); //将字符串str中始于stridx的部分作为构造函数的初值
string s(str, strbegin, strlen); //将字符串str中始于strbegin、长度为strlen的部分作为字符串初值
string s(cstr); //以C_string类型cstr作为字符串s的初值
string s(cstr,char_len); //以C_string类型cstr的前char_len个字符串作为字符串s的初值
string s(num, c); //生成一个字符串,包含num个c字符
string s(strs, beg, end); //以区间[beg, end]内的字符作为字符串s的初值