我想将此()
转换为此) (
例如(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;
但它不起作用
答案 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;