如何反括号

本文关键字:何反括 | 更新日期: 2023-09-27 17:51:06

我想把这个()转换成这个) (

例如(1+2)) 1+2(

i have try this

char[] cArray = text.ToCharArray();
        for (int i = 0; i < text.Length; i++)
        {
            if (cArray[i] == '(')
            {
                cArray[i] = ')';
            }
            if (cArray[i] == ')')
            {
                cArray[i] = '(';
            }
        }
        string p=new string(cArray);
        return p;

但是它不起作用

如何反括号

问题是,在您将(更改为)之后,第二个if语句将立即为真,因此字符再次翻转回来。相反的并不是为真——如果你从)开始,它将被第二个语句翻转,但它不会再被翻转回来。最终结果是所有)字符将被翻转为(,但仅此而已。因此,输入"(((foo)))"将返回"(((foo(((

解决这个问题最简单的方法是使用else语句:
char[] cArray = text.ToCharArray();
for (int i = 0; i < text.Length; i++)
{
    if (cArray[i] == '(')
    {
        cArray[i] = ')';
    }
    else if (cArray[i] == ')')
    {
        cArray[i] = '(';
    }
}
return new string(cArray);

或者,您可以使用switch语句,如果您有很多不同的情况要考虑,这会更简单:

char[] cArray = text.ToCharArray();
for (int i = 0; i < text.Length; i++)
{
    switch (cArray[i])
    {
        case '(':
            cArray[i] = ')';
            break;
        case ')':
            cArray[i] = '(';
            break;
        // No need for a default as it would be a no-op
    }
}
return new string(cArray);

switch语句只对表达式求值一次(当然是在每次迭代中),所以您不需要担心这两种情况会相互干扰。

在第二个if之前使用else,如下:

char[] cArray = text.ToCharArray();
for (int i = 0; i < text.Length; i++)
{
    if (cArray[i] == '(')
    {
        cArray[i] = ')';
    }
    else if (cArray[i] == ')')
    {
        cArray[i] = '(';
    }
}
string p = new string(cArray);
return p;