operator[](size_t pos) noexcept(false) { return const_cast
((static_cast
(this))->operator[](pos)); } const char &UbuntuString::back() const noexcept(false) { if(size() == 0) throw std::out_of_range("string is empty"); return _ps[size() - 1]; } char &UbuntuString::back() noexcept(false) { return const_cast
((static_cast
(this))->back()); } size_t UbuntuString::find_first_of(char c) const noexcept { if(empty()) return nopos; //可以用strchr,这里还是自己实现 char *ptemp = _ps; while(*ptemp != 0 && *ptemp != c) ptemp++; if(*ptemp) return ptemp - _ps; return nopos; } UbuntuString::UbuntuString(const char *ps,size_t size) noexcept(false) { if(ps == NULL || *ps == 0) _ps = 0; _ps = newSH(ps,size); } const char *UbuntuString::c_str() const noexcept { return _ps; } UbuntuString UbuntuString::substr(size_t pos,size_t len) const noexcept(false) { if(len == 0 || pos >= size() ) return UbuntuString(); return UbuntuString(_ps + pos,(len > (size() - pos))?(size() - pos):len); } //可以和任意支持c_str的StringInterface的实现比较 int UbuntuString::compare(const StringInterface &si) const noexcept { return strcmp(_ps,si.c_str(); } UbuntuString::UbuntuString(const UbuntuString &us) noexcept(false) { } }
|