diff options
author | Tianyi Liang <tianyi-liang@uiowa.edu> | 2014-01-09 16:23:59 -0600 |
---|---|---|
committer | Tianyi Liang <tianyi-liang@uiowa.edu> | 2014-01-09 16:24:43 -0600 |
commit | 12dae128053342fef8af2f560fd98e1ab6a71cca (patch) | |
tree | 96d854b38d819affe72d551aee70315821e21e57 /src/util/regexp.h | |
parent | 780448ae48ed8755b11570a6843ab6871d94abef (diff) |
add constant replace, indexof
Diffstat (limited to 'src/util/regexp.h')
-rw-r--r-- | src/util/regexp.h | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/src/util/regexp.h b/src/util/regexp.h index 3f9df6aaf..f6c5b2b0f 100644 --- a/src/util/regexp.h +++ b/src/util/regexp.h @@ -183,11 +183,12 @@ public: return true; } - std::size_t find(const String &y) const { - if(y.d_str.size() == 0) return 0; + std::size_t find(const String &y, const int start = 0) const { + if(d_str.size() < y.d_str.size() + (std::size_t) start) return std::string::npos; + if(y.d_str.size() == 0) return (std::size_t) start; if(d_str.size() == 0) return std::string::npos; std::size_t ret = std::string::npos; - for(int i = 0; i <= (int) d_str.size() - (int) y.d_str.size(); i++) { + for(int i = start; i <= (int) d_str.size() - (int) y.d_str.size(); i++) { if(d_str[i] == y.d_str[0]) { std::size_t j=0; for(; j<y.d_str.size(); j++) { @@ -202,6 +203,19 @@ public: return ret; } + String replace(const String &s, const String &t) const { + std::size_t ret = find(s); + if( ret != std::string::npos ) { + std::vector<unsigned int> vec; + vec.insert(vec.begin(), d_str.begin(), d_str.begin() + ret); + vec.insert(vec.end(), t.d_str.begin(), t.d_str.end()); + vec.insert(vec.end(), d_str.begin() + ret + s.d_str.size(), d_str.end()); + return String(vec); + } else { + return *this; + } + } + String substr(unsigned i) const { std::vector<unsigned int> ret_vec; std::vector<unsigned int>::const_iterator itr = d_str.begin() + i; |