2012-09-27 25 views
13

में कनवर्ट करें मैं std::string को std::vector में एक पूर्णांक में संग्रहीत करने और पैरामीटर के रूप में फ़ंक्शन में पास करने की कोशिश कर रहा हूं।std :: string को पूर्णांक

यह मेरा कोड का एक सरलीकृत संस्करण:

error: argument of type ‘const char* (std::basic_string<char, std::char_traits<char>, std::allocator<char> >::)()const’ does not match ‘const char*’ 

मैं यह कैसे कर सकते हैं: इस प्रकार

vector <string> record; 
functiontest(atoi(record[i].c_str)); 

मेरे त्रुटि है?

+0

आप की जरूरत करने के लिए * कॉल * यह है, लेकिन वहाँ 'atoi' से कई बेहतर तरीके हैं। – chris

+3

टाइपो 'रिकॉर्ड [i] .c_str' -> रिकॉर्ड [i] .c_str() '। – Hindol

उत्तर

29

से साथ सी ++ 11:

int value = std::stoi(record[i]); 
+4

काफी सहायक। सी ++ 11 से कम के लिए, क्या कोई ठोस उदाहरण है? –

+11

** रीडर सावधान रहें: ** यदि आप 100% सुनिश्चित नहीं हैं कि 'std :: stoi' में इनपुट ** हमेशा वैध पूर्णांक ** होगा, तो आपको 'try/catch' सेट अप करना होगा 'std :: invalid_argument'। – CodeMouse92

+1

और 'std :: out_of_range' के लिए भी। – ebk

11
record[i].c_str 

record[i].c_str() 

के समान नहीं है तुम वास्तव में त्रुटि संदेश से प्राप्त कर सकते हैं: समारोह एक const char* उम्मीद है, लेकिन आप प्रकार const char* (std::basic_string<char, std::char_traits<char>, std::allocator<char> >::)()const का एक तर्क जो करने के लिए एक सूचक है प्रदान कर रहे हैं कक्षा std::basic_string<char, std::char_traits<char>, std::allocator<char> > का एक सदस्य फ़ंक्शन जो const char* देता है और कोई तर्क नहीं लेता है।

+0

अरे! धन्यवाद दोस्त अहाह –

+0

@ लुचियाब ग्रिगोर –

+0

मैं देख सकता हूं कि दूसरा उत्तर कैसे बेहतर है, लेकिन मुझे नहीं लगता कि यह एक डाउनवोट का हकदार है ... –

12

मानक लाइब्रेरी से स्ट्रिंगस्ट्रीम का उपयोग करें। यह क्लीनर है और यह नहीं बल्कि सी ++ है सी

int i3; 
std::stringstream(record[i]) >> i3; 
+0

या http: // en .cppreference.com/w/cpp/string/basic_string/stol –

+0

@ BЈовић बहुत अच्छा। सी ++ 11 के लिए आगे – Indy9000

+0

मुझे लगता है कि यह किसी भी धारा – javapowered

0
#include <boost/lexical_cast.hpp> 

functiontest(boost::lexical_cast<int>(record[i])); 
संबंधित मुद्दे