将一个以null结尾的const char *字符串数组转换为std :: vector< std :: string>

时间:2010-12-16 18:36:54

标签: c++ string stl vector

我有一个Visual Studio 2008 C ++函数,其中我给出了一个以空字符结尾的字符串const char*的数组以及该数组中字符串数的计数。

我正在寻找一种巧妙的方法,将const char*数组转换为std::vector< std::string >

/// @param count - number of strings in the array
/// @param array - array of null-terminated strings
/// @return - a vector of stl strings
std::vector< std::string > Convert( int count, const char* array[] );

提升很好,STL很好。

谢谢, PaulH

4 个答案:

答案 0 :(得分:14)

这样的东西?:

vector< string > ret( array, array + count );

答案 1 :(得分:4)

试试这个:

#include <string>
#include <vector>
#include <iterator>
#include <algorithm>
#include <iostream>


int main(int argc,char* argv[])
{
    // Put it into a vector
    std::vector<std::string>    data(argv, argv + argc);

    // Print the vector to std::cout
    std::copy(data.begin(), data.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
}

答案 2 :(得分:2)

假设你的功能的签名无意中是错误的,你的意思是这样吗?

#include <algorithm>
#include <iterator>
#include <string>
#include <vector>

std::vector<std::string> Convert(int count, const char **arr)
{
    std::vector<std::string> vec;
    vec.reserve(count);
    std::copy(arr, arr+count, std::back_inserter(vec));
    return vec;
}

int main()
{
    const char *arr[3] = {"Blah", "Wibble", "Shrug"};
    std::vector<std::string> vec = Convert(3, arr);
    return 0;
}

答案 3 :(得分:0)

我假设你的数组字符串之间用0分隔。

std::vector< std::string > Convert( int count, const char* array )
{
   std::vector< std::string > result;

   for(const char* begin = array; count; --count)
   {
    const char* end = begin;
    for(; *end; ++end);
    result.push_back(std::string(begin, end));
    begin = end + 1;
   }

   return result;
}