我需要使用for循环来反转字符串,但我做不到。我在做什么错了?
class Program
{
static void Main(string[] args)
{
string s;
string sReverse;
Console.WriteLine("Say any word please: ");
s = Console.ReadLine();
for (int i = 0; i < s.Length; i++)
{
s[s.Length - i] = sReversa[i];
}
}
}
答案 0 :(得分:1)
字符串是不可变的。您无法逐个字符地更改它们。
如果要随机访问字符串中的字符,请先将其转换为char数组(使用<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>Append div</button>
),然后在完成后将其转换回原处(ToCharArray
的构造函数接受一个char数组)。
String
输出:
string a = "1234";
char[] b = a.ToCharArray();
b[1] = 'X';
a = new string(b);
Console.WriteLine("{0}", a);
有更简单的方法来反转字符串(例如LINQ可以让你做1X34
),但是如果您想使用for循环和当前方法,则可能是您缺少的那条信息
答案 1 :(得分:1)
这些将是代码中所需的最小更改:
public static void Main()
{
string s;
string sReverse = string.Empty; // Initialise (always recommended)
Console.WriteLine("Say any word please: ");
s = Console.ReadLine();
for (int i = s.Length-1; i >=0 ; i--) // Chnage the order of indexing
{
sReverse += s[i]; // makes a new string everytime since strings are immutable.
}
Console.WriteLine(sReverse); // print your new string
}
正如其他人所说,对于大量的字符串操作/形成,这可能不是最佳方法。而是使用 StringBuilder 。
StringBuilder 适用于需要对字符串进行重复修改的情况,这种开销与 创建新的 String 对象可能会很昂贵。
下面是有关如何使用 StringBuilder 的代码段:
using System;
using System.Text; // Add this for StringBuilder
public class Program
{
public static void Main()
{
string s;
StringBuilder sReverse = new StringBuilder(); // Instantiate the object.
Console.WriteLine("Say any word please: ");
s = Console.ReadLine();
for (int i = s.Length-1; i >=0 ; i--)
{
sReverse.Append(s[i]); // Keep Appending to original string.
}
Console.WriteLine(sReverse.ToString()); // finally convert to printable string.
}
}
答案 2 :(得分:1)
string reverse = string.Join("", "some word".Reverse());
答案 3 :(得分:0)
您不能使用s[s.Length - i] = sReversa[i];
因为Strings
是不可变的。
相反,您可以使用sReverse = sReverse + s[Length];
以下代码将为您提供字符串的反向显示:
static void Main(string[] args)
{
string s;
string sReverse = "";
int Length;
Console.WriteLine("Say any word please: ");
s = Console.ReadLine();
Length = s.Length - 1;
for (int i = Length; i >= 0; i--)
{
sReverse = sReverse + s[Length];
Length--;
}
Console.WriteLine("{0}", sReverse);
Console.ReadLine();
}
注意::对于大量迭代而言,这可能是性能问题。
答案 4 :(得分:0)
使代码以最少的更改运行的最简单方法是使用StringBuilder
。与string
不同,StringBuilder
是可变的。
代码如下:
Console.WriteLine("Say any word please: ");
string s = Console.ReadLine();
StringBuilder sb = new StringBuilder(s);
for (int i = 0; i < s.Length; i++)
{
sb[s.Length - i - 1] = s[i];
}
string r = sb.ToString();
答案 5 :(得分:0)
如果必须按照自己的方式使用for
循环,则必须分配一个新的char数组,使用从后到前的字符串字符对其进行初始化,然后利用string
以char数组作为输入的构造函数。代码如下:
public static string ReverseWithFor(string s)
{
if (string.IsNullOrEmpty(s)) return s;
char[] a = new char[s.Length];
for (int i = 0; i < s.Length; i++)
a[s.Length - 1 - i] = s[i];
return new string(a);
}