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
).
我不知道如何编写代码来从数组中获取数字并将它们等于没有 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
).