การหาตัวอักษรที่ซ้ำกันในสตริงด้วย C#
สามารถหาตัวอักษรที่ปรากฏซ้ำในสตริงได้โดยใช้อาร์เรย์นับความถี่ (frequency array) ขนาด 256 สำหรับ ASCII ทั้งหมด
ตัวอย่างโค้ด
using System;
class Demo
{
static int maxCHARS = 256;
static void Calculate(string s, int[] cal)
{
for (int i = 0; i < s.Length; i++)
cal[s[i]]++;
}
public static void Main()
{
string s = "Welcometomywebsite!";
int[] cal = new int[maxCHARS];
Calculate(s, cal);
Console.WriteLine("ตัวอักษรที่ซ้ำและจำนวนครั้ง:");
for (int i = 0; i < maxCHARS; i++)
{
if (cal[i] > 1)
{
Console.WriteLine($"Character: {(char)i}");
Console.WriteLine($"Occurrence: {cal[i]} times");
Console.WriteLine();
}
}
}
}
ผลลัพธ์ตัวอย่าง
ตัวอักษรที่ซ้ำและจำนวนครั้ง:
Character: e
Occurrence: 4 times
Character: m
Occurrence: 2 times
Character: o
Occurrence: 2 times
Character: t
Occurrence: 2 times
Character: w
Occurrence: 2 times
คำอธิบาย
- สร้างอาร์เรย์
calขนาด 256 เพื่อนับความถี่ของแต่ละ ASCII code - วนลูปผ่านทุกตัวอักษรในสตริง และเพิ่มค่าที่ดัชนีตรงกับค่า ASCII
- ตรวจสอบค่าที่มากกว่า 1 แสดงว่าตัวอักษรนั้นซ้ำ
- ใช้
(char)iแปลงค่า ASCII กลับเป็นตัวอักษร
การปรับปรุงสำหรับ Unicode
หากต้องการรองรับ Unicode ให้ใช้ Dictionary<char, int> แทนอาร์เรย์ขนาดคงที่