2012-05-12 20 views
14

उदाहरण के लिए, मैं std::string कुछ फाइल करने के लिए UNIX- शैली पथ युक्त है लगता है इस स्ट्रिंग से blah 'फ़ोल्डर। तो क्या इस स्ट्रिंग को छेड़छाड़ करने का तरीका एक कुशल है (कहने वाला 'कुशल' मेरा मतलब है ') इस स्ट्रिंग को कम करने का तरीका है ताकि इसमें केवल "/first/second/blah" हो?कुशल तरीका एन

अग्रिम धन्यवाद।

उत्तर

30

एन में जाना जाता है, तो आप उपयोग कर सकते हैं

path.erase(N, std::string::npos); 

एन ज्ञात नहीं है और आप इसे खोजने के लिए चाहते हैं, आप खोज कार्यों के किसी भी उपयोग कर सकते हैं। इस मामले में आप 'अंतिम स्लेश लगाना चाहते हैं जाएगा, ताकि आप rfind या find_last_of उपयोग कर सकते हैं:

path.erase(path.rfind('/'), std::string::npos); 
path.erase(path.find_last_of('/'), std::string::npos); 

iterators के आधार पर इस बात का भी विभिन्नता है:

path.erase (path.begin() + path.rfind('/'), path.end()); 

कहा कि, अगर आप जीवित रहने के लिए पथों में हेरफेर करने जा रहे हैं, इस कार्य के लिए डिज़ाइन की गई लाइब्रेरी का उपयोग करना बेहतर है, जैसे कि Boost Filesystem

+0

बिल्कुल वही जो मैं चाहता था! मुझे पता था कि ऐसा करने का _beautiful_ तरीका होना चाहिए :) धन्यवाद। – tonytony

+0

या बहुत खूबसूरत तरीके :) – chris

+0

मैंने std :: npos के स्थान पर उत्तर, std :: string :: npos संपादित किया। npos std :: स्ट्रिंग का सदस्य नहीं है std –

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