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注释修改了数组创建,这能解决问题吗?