C#中如何交换数组字符?字符串索引赋值报错怎么解决?
嘿,咱们来搞定这个交换字符的小问题!
小朋友你好呀~先给你举个小例子:你有没有见过那种印得死死的故事书?上面的字是没法直接擦掉重写的,对吧?C#里的string(就是你代码里的s)就跟这种书一样——它是“只读”的,意思就是你不能直接改掉它里面的某个字符,这就是你看到那个报错的原因啦!
那怎么才能交换字符呢?咱们得先把这本“印死的书”变成可擦写的白板,也就是把string转换成char[](字符数组)。这个数组就像白板一样,你想擦哪个字、改哪个字都没问题~等你交换完字符,再把白板变回“故事书”就好啦!
先看看你原来的问题代码
你写的代码之所以报错,就是因为直接去改
string里的字符啦:string s = "hello"; char temp; int j = s.Length - 1; // 假设你是想和最后一个字符交换哦 for (int i = 0; i < s.Length -1; i++) { temp = s[i]; s[i] = s[j]; // 报错:string的字符不能直接改 s[j] = temp; // 同样报错! }
咱们来修改成能运行的代码
分三步,超简单:
- 把
string转成可修改的char[](书→白板) - 在数组上做交换操作(在白板上改字)
- 把数组转回
string(白板→新书)
完整的正确代码是这样的:
string s = "hello"; char temp; int j = s.Length - 1; // 第一步:把字符串转成字符数组(变成可擦写的白板) char[] charArray = s.ToCharArray(); // 第二步:在数组里交换字符,这时候不会报错啦! for (int i = 0; i < charArray.Length / 2; i++) { // 这里改成除以2,交换一半就够啦,不然会换回去哦 temp = charArray[i]; charArray[i] = charArray[j]; charArray[j] = temp; j--; // 让j往前挪一位,交换下一对 } // 第三步:把字符数组转回字符串(重新变成书) s = new string(charArray); // 看看结果! Console.WriteLine(s); // 会输出 "olleh" 哦
再给你划个重点
string是只读的“书”:不能直接改里面的字符char[]是可擦写的“白板”:可以随便修改里面的内容- 交换字符的流程就是:书 → 白板 → 改字 → 新书
内容的提问来源于stack exchange,提问作者Beginner Programmer
相关产品推荐
相关产品推荐

