C++ 数组到数字

C++ Array to a number

我不知道如何编写代码来从数组中获取数字并将它们等于没有 0 的整数。

例如,我有一个数组 A[size]= {12,68,45,20,10},我需要得到 n= 12684521 的答案。有什么想法或提示吗?

这是我的做法:

#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
#define size 5

int main() {
  std::string ret;
  
  //your array
  int a[size]={12,68,45,20,10};
  //transform to string
  std::ostringstream out; 
  for(int i=0;i<size;i++)out << a[i];
  ret = out.str();
  //transform
  ret.erase(remove(ret.begin(), ret.end(), '0'), ret.end());
  //return string
  std::cout << ret;
  //return number
  int ret2 = std::stoi (ret);
  std::cout << ret2;
}

控制台:“12684521”

正如其他人提到的,您想要使用流式对象,或者如果您使用的是 C++20,那么您想要使用 remove_if。

你可能想看看这个。您需要知道如何使用流才能成为一名开发人员。 What exactly does stringstream do?

使用@MikeCAT 方式

size_t concatArrrayNoZero(int[] a, size_t len){
  std::stringstream ss;
  for( auto i : a){
    //add everything to buffer    
    ss<<i;
  }
  //convert the ss into a string
  std::string str = ss.str();
  //remove the '0' from the string then erase the extra space in the string
  str.erase(std::remove(str.begin(), str.end(), '0'),
               str.end());
  //clear the buffer
  ss.clear();
  //put the nonzeros back into the buffer
  ss<<str;
  //make the return type
  size_t r;
  // get the data out of the buffer
  r<<ss;
  return r;
}

size_t 是您计算机的最大无符号整数类型。

另请查看 https://en.wikipedia.org/wiki/Erase%E2%80%93remove_idiom 以了解您删除和移除的原因

不使用字符串或字符串流也可以做到这一点。这是代码:

int integer(int* arr, size_t length)
{
    int result = 0;
    for (size_t i = 0; i < length; i++)
    {
        int t1 = arr[i], t2 = 0;
        while (t1 != 0)
        {
            if(t1 % 10 != 0)
            {
                t2 *= 10;
                t2 += t1 % 10;
            }
            t1 /= 10;
        }
        while (t2 != 0)
        {
            if(t2 % 10 != 0)
            {
                result *= 10;
                result += t2 % 10;
            }
            t2 /= 10;
        }
    }
    return result;
}

奇怪的是制作两个内部 while 循环,因为其中一个循环中的操作反映了数字(例如,如果 arr[i] 是 68,那么 t2 变成 86,然后附加 6 和 8至 result).