2017-08-21 24 views
-4

私はC#でテキストを反転するプログラムを作成しようとしています。私はC#の初心者ですが、これをどうやって行うのかについてはあまりよく分かりません。私はテキストボックスから入力を取得して変換する必要があることを知っているが、私はそれを行う方法を知らない。私が見たウェブサイトのいくつかはVB用であるか、または閉じられている。C#でテキストを反転する

私はまた、別のテキストボックスは、単語の長さを表示したいと思い

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

で鉱山で収まるようにする方法がわかりませんよ最初のいくつかの素朴な解決策:

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

または:

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

または:彼らはグラフェンが複数のchar(一Unicodeコードポイントによって構成することができる複数のコード単位として符号化することができるので、ユニコードでうまく動作dont'tしかし

var chars = text.ToCharArray(); 
Array.Reverse(chars); 
var reversedText = new String(chars); 

- これはcharタイプの正しい名前です)。一つの例?

string text = "à"; 
Debug.Assert(text.Length == 2); 

それが文字+ GRAVEのアクセントを組み合わせU0041 LATIN CAPITAL LETTER Aと+ U0300によって構成されますので、それは2です。単に文字列を逆順にすると、文字、符号化されたテキスト、およびUnicodeの代理文字を組み合わせると、順序が重要で保存されなければならないため、正しいテキストを取得できません。 How can I perform a Unicode aware character by character comparison?を読むことをお勧めします。

若干良いバージョン:

var elements = StringInfo.GetTextElementEnumerator(text).AsEnumerable(); 
var reversedText = String.Concat(elements.Reverse()); 

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

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

は、それはあなたがこれを書くために架空のAsEnumerable()拡張メソッドを使用してIEnumerable<string>内部IEnumeratorことラップにしたいことがあり、完璧であることをこれまでまだです

の最終的なソリューションではないことに注意してください。いくつかのコードポイントがあります。彼らは異なった特別な意味を持っています(例えばRTLマーカー)。私が愛するもう一つの現実世界の例は、引用する:Why are emoji characters like ‍‍‍ treated so strangely in Swift strings?

0

古き良きC++スタイルのコードに適応し

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

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

t.Reverse():あなたはまた、LINQを使用することができます

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; 
} 

。これはあなたに列挙型を与えるので、それから新しい文字列をインスタンス化する必要がありますIEnumerable<char>

関連する問題