2010-12-27 8 views
5

से एक वर्ण को हटाने से मेरे पास एक स्ट्रिंग है। यदि स्ट्रिंग है तो मैं स्ट्रिंग के अंतिम अक्षर को हटाना चाहता हूं। मैं निम्नलिखित कोड,एक स्ट्रिंग

str.erase(remove_if(str.begin(), str.end(), isspace), str.end()); 

की कोशिश की लेकिन मेरे जी ++ संकलक मुझे यह कहते हुए एक त्रुटि देता है:

error: no matching function for call to ‘remove_if(__gnu_cxx::__normal_iterator<char*, 
std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, 
__gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, 
std::allocator<char> > >, <unresolved overloaded function type>)’ 

कृपया मदद करते हैं।

+0

सी ++ लेकिन कंपाइलर जी ++ है ... –

उत्तर

7

पहली समस्या यह है कि isspace में C++ मानक लाइब्रेरी में एकाधिक अधिभार हैं।

#include <string> 
#include <algorithm> 
#include <cctype> 

int main() 
{ 
    std::string str = "lol hi innit"; 
    str.erase(std::remove_if(str.begin(), str.end(), (int(*)(int))isspace), str.end()); 
    std::cout << str; // will output: "lolhiinnit" 
} 

यह एक बड़ा बदसूरत लेकिन, हे, इस सी है ++: प्रारंभिक ठीक ताकि संकलक जानता है जिनमें से पता लेने के लिए कार्य करते हैं समारोह के लिए एक स्पष्ट प्रकार प्रदान करना है।

दूसरा, आपका कोड स्ट्रिंग में सभी रिक्त स्थान को हटा देगा, जो आप नहीं चाहते हैं। स्ट्रिंग के अंतिम चरित्र पर बयान पर एक सरल विचार करें:

#include <string> 
#include <cassert> 

int main() 
{ 
    std::string str = "lol hi innit "; 
    assert(!str.empty()); 

    if (*str.rbegin() == ' ') 
     str.resize(str.length()-1); 

    std::cout << "[" << str << "]"; // will output: "[lol hi innit]" 
} 

आशा है कि इससे मदद मिलती है।

-2

आप याद कर रहे हैं एक std:: के लिए remove_if

+0

मैं नेमस्पेस std का उपयोग कर रहा हूं; –

+0

जोड़ना std :: मदद नहीं की। –

+0

आपने ' 'भी शामिल किया है? – Naveen

6

मुझे लगता है कि यह समझ नहीं क्या isspace (त्रुटि संदेश में remove_if एक तिहाई पैरामीटर के रूप में "अनसुलझे अतिभारित समारोह प्रकार" के अनुसार) है। ::isspace आज़माएं, और ctype.h

+0

yup .. यह किया गया ... –

+0

मैं std :: isspace का उपयोग करने की कोशिश कर रहा था ..: पी –

+0

मैंने 'std :: isspace' का उपयोग नहीं किया है, लेकिन संदर्भ के अनुसार इसमें 2 तर्क होते हैं, दूसरा है लोकेल, इसलिए यह भविष्यवाणी के रूप में फिट नहीं है – davka

0

मुझे आपके जैसा ही समस्या थी, इसलिए मैंने isspace से छुटकारा पा लिया। मैं तो बस इस के साथ चला गया:

str.erase(std::remove_if(str.begin(),str.end(),' '),str.end()); 

कि विजुअल C++ के साथ 2012 मेरे लिए काम किया, विजुअल स्टूडियो 2012 का उपयोग कर अगर यह आप के लिए काम करता है देखें।