在Rcpp上反转一个字符串

时间:2018-01-26 18:06:55

标签: c++ r string reverse rcpp

我正在尝试使用Rcpp来加速我在R中使用的一些代码。但是我遇到了麻烦。

我的矢量看起来像:

vec
[1] "Aa" "Aa" "Aa" "Aa" "Aa" "Aa" "Aa" "Aa" "Aa" "Aa"

但对于我的矢量的某些随机部分,我想要反转字符串(如aA)。 在我的R代码中,我正在使用stringi::stri_reverse,它以直截了当的方式完成我想要的工作。我试图在C ++上实现类似的方法,但我遇到了麻烦! 基本上,我正在尝试将每个vec[i]拆分为"A" "a",然后使用std::reverse,然后使用here中的函数进行连接。为此:

[1] "Aa" "aA" "aA" "aA" "Aa" "Aa" "Aa" "Aa" "Aa" "Aa"

我认为这不会比stri_reverse更快(实际上可能会慢得多)(我猜这是一个C函数)。实现这一目标的最佳方法是什么?导入stringi::stri_reverse以在我的Rcpp代码上使用?复制stri_reverse代码(我不知道怎么做,但我可以搞清楚)并加入我的Rcpp函数?我正在尝试这两天,我非常感谢你们的任何帮助。

编辑:

到目前为止这是我的Rcpp代码(我从here得到了它):

CharacterVector stri_reverseC(String input, int n) {
  std::string myString = input;
  int cutpoint = n;
  int len = myString.length();
  int nout = len / cutpoint ;
  CharacterVector out( nout ) ;
  for( int i=0; i<nout; i++ ) {
    out[i] = myString.substr( cutpoint*i, 1 ) ;
  }

  std::reverse(out.begin(), out.end());
  out = concat(out);
  return out; 
}

0 个答案:

没有答案