我正在尝试制作一个在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;
}
答案 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上的第一个答案,所以我希望这有帮助!