Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

การกลับลำดับคำในสตริง (Reverse Words) ใน C#

มี 2 ระดับการ "Reverse": กลับตัวอักษร (Character Reverse) และ กลับลำดับคำ (Word Reverse)

1. กลับตัวอักษร (Character Reverse)

string str = "Welcome";
// ผลลัพธ์: "emocleW"

// วิธีต่างๆ
var r1 = new string(str.Reverse().ToArray());           // LINQ
var r2 = new string(str.ToCharArray().Reverse().ToArray()); // Array.Reverse
var r3 = new StringBuilder(str).Reverse().ToString();   // Extension Method (Custom)

2. กลับลำดับคำ (Word Reverse)

string sentence = "Hello World from C#";
// ผลลัพธ์: "C# from World Hello"

string reversedWords = string.Join(" ", sentence.Split(' ').Reverse());

3. กลับตัวอักษรในแต่ละคำ (Per-Word Character Reverse)

string sentence = "Hello World";
// ผลลัพธ์: "olleH dlroW"

string perWordReversed = string.Join(" ", 
    sentence.Split(' ').Select(w => new string(w.Reverse().ToArray())));

ตัวอย่างครบถ้วน

using System;
using System.Linq;

class Demo {
    static void Main() {
        string str = "Welcome";
        string sentence = "Hello World from C#";
        
        // 1. Character Reverse
        Console.WriteLine("Char Reverse: " + new string(str.Reverse().ToArray()));
        // emocleW
        
        // 2. Word Reverse
        Console.WriteLine("Word Reverse: " + string.Join(" ", sentence.Split(' ').Reverse()));
        // C# from World Hello
        
        // 3. Per-Word Character Reverse
        Console.WriteLine("Per-Word Char Reverse: " + 
            string.Join(" ", sentence.Split(' ').Select(w => new string(w.Reverse().ToArray()))));
        // olleH dlroW morf #C
        
        // 4. ทั้งสอง: Reverse Words แล้ว Reverse Chars ในแต่ละคำ
        Console.WriteLine("Full Reverse: " + 
            string.Join(" ", sentence.Split(' ').Reverse().Select(w => new string(w.Reverse().ToArray()))));
        // #C morf dlroW olleH
        
        Console.ReadLine();
    }
}

Performance: StringBuilder สำหรับสตริงยาว

string ReverseWordsEfficient(string input) {
    var words = input.Split(' ');
    var sb = new System.Text.StringBuilder(input.Length);
    
    for (int i = words.Length - 1; i >= 0; i--) {
        if (i < words.Length - 1) sb.Append(' ');
        sb.Append(words[i]);
    }
    return sb.ToString();
}

สรุป

เป้าหมายCode Snippet
Reverse Charactersnew string(str.Reverse().ToArray())
Reverse Word Orderstring.Join(" ", str.Split(' ').Reverse())
Reverse Chars per Wordstring.Join(" ", str.Split(' ').Select(w => new string(w.Reverse().ToArray())))
Both (Full Reverse)string.Join(" ", str.Split(' ').Reverse().Select(w => new string(w.Reverse().ToArray())))