2010-12-16 19 views
11

पर नल टर्मिनेटेड कॉन्स char * स्ट्रिंग्स की एक सरणी को परिवर्तित करना मेरे पास एक विजुअल स्टूडियो 2008 सी ++ फ़ंक्शन है जहां मुझे नल-टर्मिनेटेड तारों की एक सरणी const char* और एक गिनती दी गई है उस सरणी में तारों की संख्या।एक शून्य :: वेक्टर <std :: string>

मैं एक 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[]); 

बूस्ट करने के लिए const char* की एक सरणी मोड़ के एक चालाक रास्ता तलाश कर रहा हूँ ठीक है, एसटीएल ठीक है।

धन्यवाद, PaulH

+8

कि की 'स्थिरांक चार *' एक सरणी नहीं है। क्या आपका मतलब है कि तार क्रमशः संग्रहीत किए जाते हैं और एनयूएलएल द्वारा अलग किए जाते हैं? –

+2

वहां, मैंने इसे ठीक कर दिया क्योंकि ओपी प्रतिक्रिया नहीं दे रहा था और प्रश्न अन्यथा कोई समझ नहीं आता है। –

+0

बेशक यह समझ में आया, केवल एक अलग है जिसे आप –

उत्तर

14

कुछ इस तरह ?:

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

@genpfault: हाँ, यह आसान होगा :) * groans * स्वयं पर ... –

+1

यह हमेशा मुझे उस पपड़ी को आश्चर्यचकित करता है जो इसे कठिन तरीके से करने की कोशिश करता है। इसे आसान रखने के लिए +1। –

+0

इसे छोड़कर –

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; 
} 
+0

यही वह है जो मैंने शुरू किया और मैंने सवाल पूछने का फैसला क्यों किया। मुझे पता था कि एक आसान तरीका था ... मेरा दिमाग सिर्फ सतह पर नहीं ला रहा था। – PaulH

+0

@PaulH: हाँ, यह भूलना बहुत आसान है कि 'वेक्टर' में इस परिस्थिति के लिए एक कन्स्ट्रक्टर बनाया गया है - जैसा कि मुझे लगता है कि मैंने इस मामले में साबित किया है :) –

0

अपने सरणी तार में मुझे लगता है 0s से अलग होते हैं।

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; 
} 
+0

काम नहीं करने के बारे में बात करें ... –

+0

कृपया बात करें, अन्यथा यह है ... –

+0

यह कोड मूल प्रश्न, प्रकार के लिए काम करता है। यही है, मूल रूप से प्रश्नकर्ता के कार्य में यह हस्ताक्षर था और इसलिए धारणा है कि तारों को '\ 0' से अलग किया गया है। उस स्थिति में, यह कोड काम करता है। हालांकि, सवाल संपादित किया गया था। –

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")); 
} 
संबंधित मुद्दे