string str = "ABCDE";
char[] chArr = str.ToCharArray();
int nIndexMax = chArr.Length - 1;
for (int i=0;i<=nIndexMax;i++)
{
if (i == nIndexMax - i)
{
continue;
}
chArr[i] ^= chArr[nIndexMax-i];
chArr[nIndexMax-i] ^= chArr[i];
chArr[i] ^= chArr[nIndexMax-i];
}
str = new string(chArr);
这里的目的是翻转字串。
但是呢,执行到str = new string(chArr);的时候,chArr中保存的是"EDCBA",执行后,str还是"ABCDE"。是为什么呢?如何可以使用chArr构造一个新的string呢?
个人认为str还是指向了原来的字串?为什么呢?谁能给解释一下。谢谢 ^_^
char[] chArr = str.ToCharArray();
int nIndexMax = chArr.Length - 1;
for (int i=0;i<=nIndexMax;i++)
{
if (i == nIndexMax - i)
{
continue;
}
chArr[i] ^= chArr[nIndexMax-i];
chArr[nIndexMax-i] ^= chArr[i];
chArr[i] ^= chArr[nIndexMax-i];
}
str = new string(chArr);
这里的目的是翻转字串。
但是呢,执行到str = new string(chArr);的时候,chArr中保存的是"EDCBA",执行后,str还是"ABCDE"。是为什么呢?如何可以使用chArr构造一个新的string呢?
个人认为str还是指向了原来的字串?为什么呢?谁能给解释一下。谢谢 ^_^
解决方案 »
- 如何让多线程暂停后再重启?
- 每天一个设计模式(策略模式 -2011.4.18 星期一)期待提问和讨论
- c#如何获取某个对象在内存的起始地址
- C# 如何让窗体有前端显示的功能?
- CDO发邮件问题
- 没有会吗?(winform)
- app.config的保存值问题
- 怎么学好C#?
- 有什么方式可把access中的数据(只有少量)以类似word文档中表单的形式打印出来?
- 求:MS.Press.Inside.C.Sharp.2nd.Edition,急!!!
- 大家通常到哪弄教程+源代码?
- 关于jmail ,为什么会弹出“the message war undeliverable,all servers failed to receive the message"
- chArr {Length=0x5} char[]
[0x0] 0x41 'A' char
[0x1] 0x42 'B' char
[0x2] 0x43 'C' char
[0x3] 0x44 'D' char
[0x4] 0x45 'E' char因为顺序没改过来,所以当然str没变了。问题应在上面:
for (int i=0;i<=nIndexMax;i++)
{
if (i == nIndexMax - i)
{
continue;
}
chArr[i] ^= chArr[nIndexMax-i];
chArr[nIndexMax-i] ^= chArr[i];
chArr[i] ^= chArr[nIndexMax-i];
}
char[] chArr = str.ToCharArray();
int nIndexMax = chArr.Length - 1;
for (int i=0;i<=nIndexMax;i++)
{
if (i == nIndexMax - i)
{
break;
}
chArr[i] ^= chArr[nIndexMax-i];
chArr[nIndexMax-i] ^= chArr[i];
chArr[i] ^= chArr[nIndexMax-i];
}
str = new string(chArr);
这样就对了。我循环多了。
错了,是两个字符串,一个variable name而已>>> 如何可以使用chArr构造一个新的string呢
这是System.String类的一个构造函数而已这段代码没什么吧... 就是相当于翻转了一个数组。Array.Reverse方法也可以
而这里的循环写的很有意思,一般会这样写:
int nIndexMax = chArr.Length;
for (int i=0;i<nIndexMax;i++)
{}很少在for循环里面写<=或者>=的
char[] chArr = str.ToCharArray();
int nIndexMax = chArr.Length - 1;
for (int i=0;i<=nIndexMax;i++)
{
if (i == nIndexMax - i)
{
break;
}
chArr[i] ^= chArr[nIndexMax-i];
chArr[nIndexMax-i] ^= chArr[i];
chArr[i] ^= chArr[nIndexMax-i];
}
str = new string(chArr);
char[] chArr = str.ToCharArray();
int nIndexMax = chArr.Length - 1;
for (int i=0;i<=nIndexMax;i++)
{
if (i >= nIndexMax - i)
{
break;
}
chArr[i] ^= chArr[nIndexMax-i];
chArr[nIndexMax-i] ^= chArr[i];
chArr[i] ^= chArr[nIndexMax-i];
}
str = new string(chArr);