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