如何反括号
本文关键字:何反括 | 更新日期: 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;