无法使用for循环反转字符串

时间:2018-11-17 03:35:02

标签: c# arrays string for-loop reverse

我需要使用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];
        }
    }
}

6 个答案:

答案 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);
}