2012-02-09 9 views
8

मान लेने के लिए स्ट्रिंग स्ट्रिंग को कन्वर्ट करने की कोशिश कर रहा है और इसे std::getline() फ़ंक्शन में डिलीमीटर के रूप में उपयोग करने की कोशिश कर रहा है लेकिन कोई भी मैटर जो मुझे कंपाइलर करता है मुझे त्रुटि देता है। यह क्या im करने के लिए कोशिश कर रहा है:std :: getline delimiter

std::stringstream ss(s); 
    std::string item; 
    std::string delim ="&&="; 
    int ssize = delim.size(); 
    int newssize = ssize+1; 
    char del[SSIZE]; // also here when i try gives error 
    strcpy(del,delim.c_str()); 

     char * delrr[1024] = delim.c_str(); //gives error 

     while(std::getline(ss,item,delrr)) { 
      elems.push_back(item); 
    } 

त्रुटि im हो रही हमेशा स्थिरांक चार * रूपांतरण के बारे में है।

error C2440: 'initializing' : cannot convert from 'const char *' to 'char *[1024]' 
1>  There are no conversions to array types, although there are conversions to references or pointers to arrays 
1>.\UT.cpp(179) : error C2780: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &)' : expects 2 arguments - 3 provided 
1>  d:\Program Files\Microsoft Visual Studio 9.0\VC\include\string(527) : see declaration of 'std::getline' 
1>.\UT.cpp(179) : error C2784: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem)' : could not deduce template argument for 'std::basic_istream<_Elem,_Traits> &' from 'std::stringstream' 
1>  d:\Program Files\Microsoft Visual Studio 9.0\VC\include\string(475) : see declaration of 'std::getline' 
1>.\UT.cpp(179) : error C2784: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem)' : could not deduce template argument for 'std::basic_istream<_Elem,_Traits> &' from 'std::stringstream' 
1>  d:\Program Files\Microsoft Visual Studio 9.0\VC\include\string(475) : see declaration of 'std::getline' 
1>.\UT.cpp(179) : error C2782: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem)' : template parameter '_Elem' is ambiguous 
1>  d:\Program Files\Microsoft Visual Studio 9.0\VC\include\string(475) : see declaration of 'std::getline' 
1>  could be 'char **' 
1>  or  'char' 

अद्यतन:
जवाब मिला: How do I tokenize a string in C++?
http://www.codeproject.com/Articles/23198/C-String-Toolkit-StrTk-Tokenizer

+2

आप शायद * char * delrr [1024] * – Gigi

+0

के बजाय * चार डेलर [1024] * चाहते हैं, कृपया एक कदम उठाएं, और समझाएं कि आप वास्तव में क्या करना चाहते हैं, अंग्रेजी में, किसी भी कार्यान्वयन विवरण का जिक्र किए बिना। –

+0

'const char *' से 'char [1024]' में कनवर्ट नहीं किया जा सकता है अगर मैं * – user63898

उत्तर

4

गेटलाइन() का तीसरा तर्क एक char है, न कि चार सरणी। this देखें। यदि आप एकाधिक डिलीमीटर या एकाधिक वर्णों से बने डिलीमीटर की आवश्यकता है तो आप इस फ़ंक्शन का उपयोग नहीं कर सकते हैं।

+0

हम्म तो मैं सक्षम करने में सक्षम होने के लिए क्या कर सकता हूं डेलीमीटर बड़ा तो एक चार का उपयोग करें? – user63898

+0

भी एक समस्या है, लेकिन वह उस पंक्ति तक पहुंचने से पहले उसे अपनी त्रुटि मिलती है। –

+0

@ user63898: आपको डिलीमीटर के रूप में उपयोग किए जाने वाले सबस्ट्रिंग की खोज करने और डिलीमीटर के बीच सबस्ट्रिंग निकालने की आवश्यकता है। ढूंढें() और substr() आपके दोस्त हैं। –

3

std :: स्ट्रिंग :: c_str() आप एक चरित्र सरणी के लिए सूचक देता है। c_str() पर कॉल के परिणामों के साथ एक वर्ण सरणी भरने के लिए आपको strcpy() या strncpy() का उपयोग करने की आवश्यकता होगी क्योंकि वास्तव में वे सी शैली स्ट्रिंग की प्रतिलिपि बनाते हैं।

इसके अलावा, आपने 1024 वर्णों की बजाय 1024 वर्ण पॉइंटर्स की एक सरणी के रूप में delrr घोषित कर दिया है, क्या वास्तव में यह इरादा है?

संबंधित मुद्दे