Dear Masaki,

There is no need to send the same message 16 times to this list. It won't
get it answered faster. If anything, it'll likely lessen the chance of
receiving an answer. Please use this list with a bit consideration of those
who aren't necessarily able to answer your question but still follow the
discussion in order to learn a thing or two.

Thank you
Joris

On Sun, May 15, 2016 at 5:19 PM, Masaki Tsuda <teu...@gmail.com> wrote:

> 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
>



-- 
Joris Meys
Statistical consultant

Ghent University
Faculty of Bioscience Engineering
Department of Mathematical Modelling, Statistics and Bio-Informatics

tel :  +32 (0)9 264 61 79
joris.m...@ugent.be
-------------------------------
Disclaimer : http://helpdesk.ugent.be/e-maildisclaimer.php
_______________________________________________
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

Reply via email to