Hello, all This is my first post to this mailing list.
I might have found bugs with String::replace_first() and String::replace_last(). The bugs can be reproduced by following code. (R version 3.2.3 Rcpp 0.12.4) ------------------- // [[Rcpp::export]] void rcpp_string(){ String s("AABCDABCDA"); Rcout << "replace_all()\n"; Rcout << s.replace_all("AB", "ab").get_cstring() << "\n"; Rcout << "\n"; s="AABCDABCDA"; Rcout << "replace_first()\n"; Rcout << s.replace_first("AB", "ab").get_cstring() << "\n"; Rcout << "\n"; s="AABCDABCDA"; Rcout << "replace_last()\n"; Rcout << s.replace_last("AB", "ab").get_cstring() << "\n"; Rcout << "\n"; } ------------------- > rcpp_string() replace_all() AabCDabCDA replace_first() abBCDABCDA replace_last() AABCDABCDab ------------------- The problem is caused by find_first_of() and find_last_of() and it can be resolved by replacing these functions to find() and rfind(). ------------------- inline String& replace_first(const char* s, const char* news) { RCPP_STRING_DEBUG_2("String::replace_first(const char* = '%s' , const char* = '%s')", s, news); if (is_na()) return *this; setBuffer(); size_t index = buffer.find(s); //size_t index = buffer.find_first_of(s); if (index != std::string::npos) buffer.replace(index, strlen(s), news); valid = false; return *this; } inline String& replace_last(const char* s, const char* news) { RCPP_STRING_DEBUG_2("String::replace_last(const char* = '%s' , const char* = '%s')", s, news); if (is_na()) return *this; setBuffer(); size_t index = buffer.rfind(s); //size_t index = buffer.find_last_of(s); if (index != std::string::npos) buffer.replace(index, strlen(s), news); valid = false; return *this; } ------------------- > rcpp_string() replace_all() AabCDabCDA replace_first() AabCDABCDA replace_last() AABCDabCDA ------------------- Regards ------------------------------------------------------------------- Masaki Tsuda E-mail : teu...@gmail.com
_______________________________________________ Rcpp-devel mailing list Rcpp-devel@lists.r-forge.r-project.org https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel