【问题标题】:multiply chars from array in C#C#中数组中的字符相乘
【发布时间】:2020-04-08 02:48:10
【问题描述】:

我遇到了将 char 值与整数相乘的问题。 我得到的不是正确的价值观,而是非常大的价值观。 final 在这里 = 32487000 但是为什么。当我检查数组的值时,我看到它添加了“51”、“50”等......

我尝试了很多方法来转换它,但每次都是同样的问题......

我会非常感谢任何想法。

static void Main(string[] args) {
    int final = 5;
    char[] arr = new char[]{'1', '2', '3', '4'}

    for (int i = 0; i < arr.Length; i++) {
      final = final * arr[i];
    } 
}

【问题讨论】:

  • 我不确定您要解决哪个问题。这个问题听起来太像一个 XY 问题(您正在尝试解决问题 X 并想出了此处所示的解决方案,但这有问题 Y,您现在要求的是 Y 而不是 X 的解决方案)。
  • 无论如何,chars 的问题是它们可以保存许多非数字值。您希望如何对待'A'?作为十进制值为 10 的十六进制字符?

标签: c# arrays unicode char multiplication


【解决方案1】:

当您将charint 相乘时,char 将首先转换为其字符代码。 '1' 的字符代码是 495*49 将是 245。此问题在整个循环中都会出现。相反,您希望在将 charfinal 相乘之前将其解析为 int

int num = int.Parse(arr[i].ToString());

一旦你得到了数字形式的字符,你就可以将它相乘:

public static void Main(string[] args) {
    int final = 5;
    char[] arr = new char[]{'1', '2', '3', '4'};

    for (int i = 0; i < arr.Length; i++) {
      int num = int.Parse(arr[i].ToString()); // convert to int
      final = final * num;
    } 
    Console.WriteLine(final); // 120
}

【讨论】:

  • 或者,简单地使用int[]作为数组。
  • @MrLister 是的,如果 OP 可以使用 int 数组,那将是最简单的方法
  • 是的。问题不在于 char '1' 的代码值不是 1,而是他们首先使用 chars。另请参阅我的问题。
猜你喜欢
  • 2015-07-03
  • 2013-05-21
  • 1970-01-01
  • 2022-06-15
  • 2021-11-26
  • 1970-01-01
  • 1970-01-01
  • 2016-06-24
  • 2019-10-10
相关资源
最近更新 更多