C# C语言中的反向文本#

C# C语言中的反向文本#,c#,C#,我正在尝试制作一个程序,可以反转C#中的文本。我是C#的新手,不太清楚如何做到这一点。我知道我必须从文本框中获取输入并转换它,但我不知道怎么做。我看的一些网站要么是VB的,要么已经关闭了 我还想让另一个文本框显示单词的长度 namespace WindowsFormsApp1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } privat

我正在尝试制作一个程序,可以反转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;
}

首先,一些简单的解决方案:

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

或:

但是,它们不能很好地使用Unicode,因为一个图形可能由多个
char
组成(一个Unicode代码点可能被编码为多个代码单元-这是
char
类型的正确名称)。举个例子

string text = "à";
Debug.Assert(text.Length == 2);
它是2,因为它是由字符+U0041拉丁文大写字母A和+U0300组合而成,并带有严肃的口音。如果只是反转字符串,则无法获得正确的文本,因为组合字符、编码文本和Unicode代理时,顺序很重要,必须保留。我建议你读一读

稍好的版本:

var elements = new List<string>();
var enumerator = StringInfo.GetTextElementEnumerator(text);
while (enumerator.MoveNext())
    elements.Add((string)enumerator.Current);

var reversedText = String.Concat(elements.Reverse());
请注意,这不是最终的解决方案,因为有些代码点必须位于特定位置,并且它们具有不同和特殊的含义(例如RTL标记)。另一个我喜欢引用的真实例子:为什么表情符号像

好的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


这是C#中的一个方法,它接受您的名字的输入,并将其反向返回(然后您可以替换自己的变量)。这是我关于堆栈溢出的第一个答案,希望这能有所帮助

我同意这是重复的,我不会投票以重复结束,只是因为在那篇文章中没有令人满意的答案。如果有人找到更好的方法,我会投票关闭。这个答案和上面提到的方法有什么不同?
var elements = StringInfo.GetTextElementEnumerator(text).AsEnumerable();
var reversedText = String.Concat(elements.Reverse());
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;
}
 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);
        }
    }