2015-09-15 7 views
6

मैं निम्नलिखित कोडअपसंदर्भन स्ट्रिंग इटरेटर पैदावार int

#include <iostream> 
#include <sstream> 
#include <string> 

using namespace std; 

int main() 
{ 
    std::string s("test string"); 
    for(auto i = s.begin(); i != s.end(); ++i) 
    { 
     cout << ((*i) != "s") << endl; 
    } 
} 

क्यों स्ट्रिंग इटरेटर उपज एक int और नहीं std::string अपसंदर्भन करता इस त्रुटि

comparison between pointer and integer ('int' and 'const char *') 

मिल सकता है?

+0

आपको 'cout << ((* i)! = 'S') << endl;' लिखना चाहिए (एकल उद्धरण नोट करें)। –

+0

आप एक वर्ण ('* i') की तुलना किसी सूचक के साथ एक स्ट्रिंग (' "s" ') से कर रहे हैं। वह काम नहीं कर सकता है। –

+0

यदि आप पहले से ही 'ऑटो' का उपयोग करते हैं, तो क्यों नहीं 'के लिए' (ऑटो कॉन्स्ट एंड सी: एस) {cout << (c! = 'S') << '\ n'; } '? (ध्यान दें कि आप शायद ही कभी 'endl' और अक्सर \ n'' का उपयोग करना चाहते हैं) – TemplateRex

उत्तर

8

दरअसल, यह int उत्पन्न नहीं करता है, यह char उत्पन्न करता है (क्योंकि एक स्ट्रिंग इटरेटर स्ट्रिंग में वर्णों पर पुनरावृत्त होता है)। अभिन्न पदोन्नति

  • const char[2] सरणी के माध्यम से const char* में बदल जाती है के माध्यम से

    • charint के लिए प्रोत्साहित किया जाता है: के बाद से != के अन्य संकार्य एक char (यह एक const char[2] है) नहीं है, मानक प्रचार और रूपांतरण तर्क पर लागू होते हैं करने वाली सूचक रूपांतरण,

    इस तरह आप int पर पहुंचने और const char* ऑपरेंड संकलक के बारे में शिकायत कर रहा है।

    आप एक स्ट्रिंग के लिए नहीं, एक चरित्र को dereferenced इटरेटर की तुलना करनी चाहिए:

    cout << ((*i) != 's') << endl; 
    

    "" एक स्ट्रिंग शाब्दिक (प्रकार const char[N]), '' एक चरित्र शाब्दिक (प्रकार char) encloses encloses।

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