C++ 数组转数字
Posted
技术标签:
【中文标题】C++ 数组转数字【英文标题】:C++ Array to a number 【发布时间】:2020-11-02 14:20:23 【问题描述】:我不知道如何编写从数组中获取数字并将它们等于没有0
的整数的代码。
例如,我有一个数组A[size]= 12,68,45,20,10
,我需要得到n= 12684521
的答案。任何想法或提示如何制作它?
【问题讨论】:
1.将所有数字放入std::stringstream
2. 获取连接字符串 3. 通过std::remove_if
删除零 4. 如果需要,将过滤后的字符串转换为整数
@MikeCAT 使用std::to_string
会比std::ostringstream
简单,而std::string
有erase_if
我是编程初学者,所以我尝试使用这段代码,它只给出了数字的总和
int integer(int A[],int k) int a=0,temp=0; for(int i=0;i不使用字符串或字符串流也可以做到这一点。代码如下:
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
)。
【讨论】:
数字是要乘以10还是乘以100?我的理解是乘以 10 会将数字移动一个 单个 数字。 @Thomas 数字乘以 10,因为此代码一个接一个地移动数字(例如:我会这样做:
#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”
【讨论】:
我真的不建议新开发者使用不带大括号的 for 循环。一个新的开发者会在某个时候把它变成一个错误。此外,对于新手来说,转换线的解析非常复杂。另外我认为他希望返回类型是整数 ret.erase(remove(ret.begin(), ret.end(), '0'), ret.end());有人能解释一下这条线是如何工作的吗,因为它对我来说看起来很复杂,因为我是“新鲜的”一个月前才开始编程 c++ 我也编辑返回一个整数,David remove 得到了 3 个参数,第一个是开始第二个是删除结束第三个是要删除的术语 我添加了一些关于擦除删除成语@David的附加信息 有没有办法在这里给你代表或感谢你,伙计?【参考方案3】:正如其他人提到的,您想要使用流式传输对象,或者如果您使用的是 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 了解为什么要擦除和删除
【讨论】:
以上是关于C++ 数组转数字的主要内容,如果未能解决你的问题,请参考以下文章