运行两个字符串,并在 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;
}

运行两个字符串,并在 c# 中使用“and”门

你的逻辑似乎有点不对劲。如果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'))