c++ - 在 rccp int 中保留前导零

标签 c++ r rcpp

我有一个通过 Rcpp 的函数来反转整数

#include <Rcpp.h>
using namespace Rcpp;

//' Reverse an integer
//'
//' @param x A single integer.
//' @export
// [[Rcpp::export]]
int reverse_integer(int x) {
  int reverse = 0;
  while(x != 0){
    int remainder = x%10;
    reverse = reverse*10 + remainder;
    x/=10;
  }
  return reverse;
}

这对于没有前导零或尾随零的数字来说效果很好

reverse_integer(123) == 321

但是,当有零时,它们将被删除,即

reverse_integer(100) == 1

如何最好地修改此函数,以便我仍然可以将其作为整数进行操作,但不会丢失零?

最佳答案

您需要返回一个字符串。在任何编程语言中,001 与 1 都不是不同的整数。方法如下:

#include <Rcpp.h>
using namespace Rcpp;

//' Reverse an integer
//'
//' @param x A single integer.
//' @export
// [[Rcpp::export]]
std::string reverse_integer(int x) {
  int reverse = 0;
  int ndigits = 0;
  while(x != 0){
    int remainder = x%10;
    reverse = reverse*10 + remainder;
    x/=10;
    ndigits++;
  }
  std::string output(ndigits, '\0');
  char * outputp = &output[0];
  std::string fmt_string = "%0" + std::to_string(ndigits) + "d";
  sprintf(outputp, fmt_string.c_str(), reverse);
  return output;
}

示例:

reverse_integer(103400)
[1] "004301"

关于c++ - 在 rccp int 中保留前导零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60590492/

相关文章:

c++ - Rcpp map /字典/列表

c++ - 如何在深度优先搜索的递归实现中返回 bool 值?

java - 从 Java 跳到 C

r - 重新排序行以具有重复序列的有效方法?

python - R 中的 numpy.memmap (Python) 等效吗?

r - 使用 ggplot 和 glm 绘制剂量 react 曲线的问题

C++ cURL - 如何将完整网页保存到文件中?

c++定义继承方案

c++ - 包含 C++ 库的 R 包无法为窗口构建

r - 在 R 中,此错误 : "Value of SET_STRING_ELT() must be a ' CHARSXP' not a 'character' "的常见情况有哪些