2010-09-16 17 views
5

मैं एक स्ट्रिंग में "_" के पदों जानना चाहता हूँ:मैं सी ++ स्ट्रिंग में "_" का पता कैसे लगा सकता हूं?

string str("BLA_BLABLA_BLA.txt"); 

कुछ की तरह:

string::iterator it; 
for (it=str.begin() ; it < str.end(); it++){ 
if (*it == "_")   //this goes wrong: pointer and integer comparison 
{ 
    pos(1) = it; 
} 
cout << *it << endl; 
} 

धन्यवाद, आन्द्रे

+5

डबल कोट्स के बजाय सिंगल कोट्स का उपयोग करने का प्रयास करें। –

+0

@ डोमिनिक यह जवाब क्यों नहीं है? – Motti

+0

@ मोट्टी - अब यह है (एसबीआई का जवाब देखें http://stackoverflow.com/questions/3725574/detect-in-a-string/3725671#3725671) –

उत्तर

6

आप के रूप find समारोह का उपयोग कर सकते:

string str = "BLA_BLABLA_BLA.txt"; 
size_t pos = -1; 

while((pos=str.find("_",pos+1)) != string::npos) { 
     cout<<"Found at position "<<pos<<endl; 
} 

आउटपुट:

Found at position 3 
Found at position 10 
+0

उत्तर गलत है। भले ही आप प्रारंभिक स्थिति प्रदान करते हों या नहीं, 'std :: string :: find' स्ट्रिंग * में स्थिति * वापस कर देगा। रेखा 'pos + = मिली + 1' को' pos = found + 1' में बदल दिया जाना चाहिए, और जब आप इसमें हों, तो ''''' से गुजरने के दौरान'' '' '' को प्रारंभ करके पूरा 'मिला' चर हटा दिया जा सकता है 'pos + 1'' ढूंढने के लिए 'और 'pos' में वापसी मान संग्रहीत करना। "BLA_BLABLA_BLA_BLA.txt" के साथ प्रयास करें, यह केवल पहले दो '_' का पता लगाएगा। उनके पास * वास्तविक * समस्या का उल्लेख करने के लिए –

9
std::find(str.begin(), str.end(), '_'); 
           // ^Single quote! 
16

ध्यान दें कि "_" एक स्ट्रिंग शाब्दिक, जबकि '_' एक चरित्र शाब्दिक है।

आप एक स्ट्रिंग में एक इटरेटर भिन्नता, एक चरित्र क्या आपको मिल सकता है। बेशक, वर्ण केवल चरित्र को शाब्दिक, के लिए नहीं स्ट्रिंग शाब्दिक तुलना की जा सकती।

हालांकि, जैसा कि अन्य ने पहले ही देखा है, आपको स्वयं को इस तरह के एल्गोरिदम को लागू नहीं करना चाहिए। यह दस लाख बार किया गया है, जिनमें से दो (std::string::find() और std::find()) सी ++ 'मानक पुस्तकालय में समाप्त हुए। उनमें से एक का प्रयोग करें।

+2

+1। –

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