如何反转括号?

时间:2014-03-20 20:52:51

标签: c#

我想将此()转换为此) (

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

我试过这个

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;

但它不起作用

2 个答案:

答案 0 :(得分:9)

问题是,在您将(更改为)后,第二个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语句只会评估表达式一次(当然是每次迭代),因此您不必担心这两种情况会相互干扰。

答案 1 :(得分:5)

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

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;