C# C数组乘法程序设计

C# C数组乘法程序设计,c#,arrays,multiplication,C#,Arrays,Multiplication,我有一个函数,它接受一个字符串并返回一个字符串。在其中,我将字符串转换为整数数组,然后尝试每隔一个数字相乘,如下所示: private string addEveryOther(string x) { int[] d = x.Select(n => Convert.ToInt32(n)).ToArray(); for(int i = 0; i < 10; i++) { d[i] = d[i] * 2; Message

我有一个函数,它接受一个字符串并返回一个字符串。在其中,我将字符串转换为整数数组,然后尝试每隔一个数字相乘,如下所示:

private string addEveryOther(string x) 
{    
    int[] d = x.Select(n => Convert.ToInt32(n)).ToArray();

    for(int i = 0; i < 10; i++)
    {
        d[i] = d[i] * 2;
        MessageBox.Show(d[i].ToString()); //Display the result? 
        i++;
    }

    // And later returning a string:
    StringBuilder g = new StringBuilder();
    foreach (int n in d)
    {
        g.Append(Convert.ToChar(n));
    }

    return g.ToString();
}

这适用于加法,但不适用于乘法,因为它返回奇怪的值。如果我输入3434,我希望它返回6464。现在它返回:F4,我不知道为什么?有什么建议吗?

基于上述讨论,我认为您的方法应该使用ToString而不是Convert.ToChar

private string addEveryOther(string x) 
{    
  int[] d = x.Select(n => Convert.ToInt32(n.ToString())).ToArray();

  for(int i = 0; i < d.Length; i += 2)
  {
    d[i] = d[i] * 2;
    MessageBox.Show(d[i].ToString()); //Display the result? 
  }

  // And later returning a string:
  return String.Concat(d.Select(n => n.ToString()));
}
编辑:在addEveryOther方法中使用@Kirill的Concat解决方案和@Reniuz注释应该有望解决这个问题。

正如我在注释中所写的那样

将指定的Unicode字符的值转换为 等效的32位有符号整数

所以当你转换0时,结果是48,当1时,结果是50,依此类推

以下是更改后的代码:

private string addEveryOther(string x)
{
    //1. Convert string to int, not char to int
    int[] d = x.Select(n => Convert.ToInt32(n.ToString())).ToArray();

    //2. start from second number
    for (int i = 1; i < 10; i++)
    {
        d[i] = d[i] * 2;
        MessageBox.Show(d[i].ToString()); //Display the result? 
        i++;
    }
    string s = d.ToString();
    // And later returning a string:
    StringBuilder g = new StringBuilder();
    foreach (int n in d)
    {
        //3. Convert int to string, not to char
        g.Append(n.ToString());
    }

    return g.ToString();
}
试试这个:

    int[] d = x.Select(n => int.Parse(n.ToString())).ToArray();      
    for(int i = 0; i < 10; i++)     
    {         
        d[i] = (i%2 == 0? d[i] * 2 : d[i]);
    }      
    StringBuilder g = new StringBuilder();     
    foreach (int n in d)    
    {         
        g.Append(n);    
    }      
    return g.ToString(); 
希望它能帮助你使用

 Convert.ToInt32(n.ToString())
存在冗余转换。我认为最简单的方法是

var d = x.Select(n => Char.IsDigit(n) ? n - '0' : 0).ToArray();

与您预期的相比,乘法会发生什么?在for循环中,您在头部和块内都在增加i。这是故意的吗?当使用Unicode码进行乘法时,您希望实现什么?安德斯·古斯塔夫森:是的,选择其他数字,而不是每个数字。所以每轮i+=2,你能举一个例子说明你期望发生的事情吗。我怀疑您使用的是convert,而实际上您的意思是将值解析为整数,然后只返回字符串值。您确定要在此处使用Convert类吗?谢谢,它更好,但仍然返回错误值:100491004910049100491004910049 for 21212121。为什么4被翻译成100,1被翻译成49?按照Reniuz的建议,Convert.ToInt32n.ToString可以做到这一点。int[]d=x.Selectn=>Convert.ToInt32n.ToString.ToArray;我已经根据上面的@Reniuz注释修改了数组创建,这能解决问题吗?