在C#中反转文本

时间:2017-08-21 13:07:41

标签: c#

我正在尝试制作一个在C#中反转文本的程序。我是C#的新手,我不太清楚如何做到这一点。我知道我必须从文本框中获取输入并转换它但我不知道该怎么做。我看过的一些网站要么是用于VB,要么已经关闭。

我还想让另一个文本框显示单词的长度

namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {

    }

    private void button1_Click(object sender, EventArgs e)
    {

        textBox2.Text = textBox1.Text;

        textBox3.Text = textBox1.Text + "4";
    }

    private void button2_Click(object sender, EventArgs e)
    {
        textBox2.Text = " ";
        textBox3.Text = " ";
    }

    private void button3_Click(object sender, EventArgs e)
    {
        Application.Exit();
    }


}
}

我能够找到这段代码,但我不确定如何使它适合我的

private void btnReverseString_Click(System.Object sender, System.EventArgs e)
{
   string OriginalString = txtOriginalString.Text;
   string ReverseString = "";
   for (int i = 0; i <= OriginalString.Length - 1; i++)
     {
        ReverseString += OriginalString[OriginalString.Length - 1 - i];
     }
   txtReverseString.Text = ReverseString;
}

3 个答案:

答案 0 :(得分:2)

起初有些天真的解决方案:

Export-Csv "C:\test\Output.log" -Append

或者:

var reversedText = new String(text.Reverse().ToArray());

或者:

var reversedText = String.Concat(text.Reverse());

然而,它们不适用于Unicode,因为字形可能由多个var chars = text.ToCharArray(); Array.Reverse(chars); var reversedText = new String(chars); 组成(并且一个Unicode代码点可能被编码为多个代码单元 - 这是{的正确名称{1}}类型)。一个例子?

char

它是2,因为它由角色+ U0041拉丁语大写字母A和+ U0300组合GRATVE ACCENT组成。如果您只是反转字符串,那么您将无法获得正确的文本,因为通过组合字符,编码文本和Unicode代理,顺序很重要并且必须保留。我建议你阅读How can I perform a Unicode aware character by character comparison?

稍微好一点的版本:

char

它仍然很完美,您可能希望使用假设的string text = "à"; Debug.Assert(text.Length == 2); 扩展方法<{1}} var elements = new List<string>(); var enumerator = StringInfo.GetTextElementEnumerator(text); while (enumerator.MoveNext()) elements.Add((string)enumerator.Current); var reversedText = String.Concat(elements.Reverse()); 内的IEnumerator 来编写此内容:< / p>

IEnumerable<string>

请注意,它不是 final 解决方案,因为有一些代码点必须位于特定位置,并且它们具有不同且特殊的含义(例如RTL标记)。我喜欢引用的另一个现实世界的例子:Why are emoji characters like ‍‍‍ treated so strangely in Swift strings?

答案 1 :(得分:0)

好的旧C ++风格

string input = "hello world"
string output = string.Empty;

for(int i = input.Count(); i >= 0; i--)
{
    output += input[i];
}

适应您的代码:

private void btnReverseString_Click(System.Object sender, System.EventArgs e)
{
   string OriginalString = txtOriginalString.Text;
   string ReverseString = "";
   for (int i = OriginalString.Length; i >= 0; i--)
     {
        ReverseString += OriginalString[i];
     }
   txtReverseString.Text = ReverseString;
}

您也可以使用Linq:t.Reverse()。这给你一个可枚举的,所以你需要从IEnumerable<char>

实例化一个新的字符串

答案 2 :(得分:0)

 private static void ReverseFirst()
    {
        Console.WriteLine("Reverse your name game!");
        Console.Write("Enter your first name: ");
        string firstName;
        firstName = Console.ReadLine();

        char[] reverseFirst = firstName.ToCharArray();
        Array.Reverse(reverseFirst);
        foreach(char i in reverseFirst)
        {
         Console.Write(i);
        }
    }

这是C#中的一个方法,它接受你的名字的输入,并将其反转。(你可以替换你自己的变量)这是我在Stack Overflow上的第一个答案,所以我希望这有帮助!