运行两个字符串,并在 c# 中使用“and”门
本文关键字:and 并在 两个 字符串 运行 | 更新日期: 2023-09-27 18:32:44
当我只使用 1 位字符串时,我的 andgate 有效,但其他任何东西,它根本不起作用并告诉我"特定参数超出了有效值的范围。 参数名称:启动索引。
有人知道我在这里做错了什么吗? 有没有更好的方法来添加到字符串的末尾? 谢谢!
private string parsestrings(string s1, string s2)
{
int n = s1.Length;
int m = s2.Length;
int l;
string s = "";
if (n > m)
{
for(int i = 0; i <= n; i++)
{
l = AndGate(s1[i], s2[i]);
s.Insert(i, IntToBinary(l));
}
}
else
{
for (int i = 0; i <= n; i++)
{
l = AndGate(s1[i], s2[i]);
s.Insert(i, IntToBinary(l));
}
}
return s;
}
private int AndGate(int m, int n)
{
if (m == 1 && n == 1)
return 1;
if (m == 1 && n == 0)
return 0;
if (m == 0 && n == 1)
return 0;
else
return 0;
}
你的逻辑似乎有点不对劲。如果n > m
,那么循环可能应该在 m
处停止,而不是n
:
for(int i = 0; i <= m; i++)
{
l = AndGate(s1[i], s2[i]);
s.Insert(i, IntToBinary(l));
}
不过,第二个循环似乎是正确的。
第二个想法是条件i <= m
可能应该是i < m
,因为s1[m]
是字符串后面的一个字符。
最后,您可以遵循消费者的建议,也可以改用StringBuilder
。构造字符串通常比不断添加和更新字符串更好。
您的循环终止条件是错误的。 'i <= n' 将字符串索引从字符串的末尾运行。
s.Insert
创建一个新字符串。它不会修改原始字符串。
你的意思是:
s = s.Insert ....
,同样在你的例子中 n > m
,你正在一直迭代到 n
,即使字符串 s2
不是 n
个字符长,所以你越界了。
另一方面,Linq Zip
扩展方法允许您在一行中执行此操作:
string.Concat(
s1
.Zip(s2, (c1,c2) => new {c1, c2})
.Select(x => x.c1 == '1' && x.c2 == '1' ? '1' : '0'))