我试图找到一个给定数字的数字之和。例如,134
将给出8
。
我的计划是使用将数字转换成字符串。to_string()
,然后使用. chars()
将数字作为字符迭代。然后我想将迭代中的每个char
转换为整数,并将其添加到变量中。我想得到这个变量的最终值。
我尝试使用下面的代码将char
转换为整数:
fn main() {
let x = "123";
for y in x.chars() {
let z = y.parse::<i32>().unwrap();
println!("{}", z + 1);
}
}
(游乐场)
但它会导致以下错误:
error[E0599]: no method named `parse` found for type `char` in the current scope
--> src/main.rs:4:19
|
4 | let z = y.parse::<i32>().unwrap();
| ^^^^^
这段代码正是我想做的,但是首先我必须将每个char
转换成一个字符串,然后转换成一个整数,然后通过z
增加和
。
fn main() {
let mut sum = 0;
let x = 123;
let x = x.to_string();
for y in x.chars() {
// converting `y` to string and then to integer
let z = (y.to_string()).parse::<i32>().unwrap();
// incrementing `sum` by `z`
sum += z;
}
println!("{}", sum);
}
(游乐场)
另一种方法是迭代字符串的字符,并使用折叠
转换和添加它们。
fn sum_of_string(s: &str) -> u32 {
s.chars().fold(0, |acc, c| c.to_digit(10).unwrap_or(0) + acc)
}
fn main() {
let x = "123";
println!("{}", sum_of_string(x));
}
my_char as u32 - '0' as u32
现在,关于这个答案还有很多要解释的。
它之所以有效,是因为ASCII(以及UTF-8)编码的阿拉伯数字0-9按升序排列。您可以获取标量值并减去它们。
但是,对于这个范围之外的值,它应该做什么呢?如果您提供'p'
会发生什么?它返回64。那么'.'
呢?这会引起恐慌。并且'♥'
将返回9781。
字符串不仅仅是一袋袋字节。它们是UTF-8编码的,你不能忽视这个事实。每个char
可以包含任何Unicode标量值。
这就是为什么字符串是这个问题的错误抽象。
从效率的角度来看,分配字符串似乎效率低下。Rosetta代码有一个使用迭代器的示例,迭代器只执行数值运算:
struct DigitIter(usize, usize);
impl Iterator for DigitIter {
type Item = usize;
fn next(&mut self) -> Option<Self::Item> {
if self.0 == 0 {
None
} else {
let ret = self.0 % self.1;
self.0 /= self.1;
Some(ret)
}
}
}
fn main() {
println!("{}", DigitIter(1234, 10).sum::<usize>());
}
您需要的方法是char::to_digit
。它将char
转换为以给定基数表示的数字。
您还可以使用迭代器::sum
方便地计算序列的和:
fn main() {
const RADIX: u32 = 10;
let x = "134";
println!("{}", x.chars().map(|c| c.to_digit(RADIX).unwrap()).sum::<u32>());
}
我有一个表,它有一个主键列“gid”,它的类型是“Integer NOT NULL”。我想把它转换成“Serial NOT NULL”,这样我就可以在这个表中插入一些值。我使用以下命令将其转换为串行: 此命令将整数转换为串行。但是,当我在表中输入一些数据时,出现了以下错误: 错误:重复的键值违反唯一约束“pk_测试”。 请帮我解决这个问题。是否有其他方法将整数转换为串行?
问题内容: 我需要使用反射获取字段的值。碰巧我并不总是确定该字段的数据类型是什么。为此,为了避免某些代码重复,我创建了以下方法: 并使用如下方法: 要么 问题是我似乎无法转换为: 有没有更好的方法来实现这一目标? 我正在使用Java 1.6。 问题答案: 不,即使可以从转换为,也无法转换为。对于已知为数字的 单个 值,并且想要获得长整型值,可以使用: 对于数组,这将比较棘手…
问题内容: 我有Hibernate方法,它返回给我一个BigDecimal。我有另一个API方法,我需要将该数字传递给它,但是它接受Integer作为参数。我不能更改两种方法的返回类型或变量类型。 现在如何将BigDecimal转换为Integer并将其传递给第二种方法? 有没有解决的办法? 问题答案: 您将致电(或仅致电),如果您丢失了信息,它甚至会引发异常。返回一个int,但是自动装箱可以解决
是否可以将字符串(如12)转换为等于3的整数? 我知道我可以用value()得到单个数字的值 但是,有没有可能在一个步骤而不是两个步骤中将“12”转换为3?
如果我有一个带有两个值的变量(例如Sex可以取男性或女性),我会使用如下代码:, 将字符串转换为整数。如果变量包含两个以上的值,如分类为低/中/高的工资,该怎么做?如何分配与上述类似的值?
问题内容: 我想创建一种计算整数和大十进制乘法的方法。我在Google和论坛上搜索没有找到任何内容。 有人能帮我吗? 问题答案: 要将整数(或字节/短/浮点数/双精度数)与BigInteger(或BigDecimal)相乘,必须先将本机数字转换为BigInteger / BigDecimal。 注意:是不一样的,而且在不同的原因的BigDecimal和BigInteger的。在这两种情况下,我建议