في البداية، يجدر بك أن تعلم أن الشيفرة التي كتبتها لديها بعض الأخطاء والتحسينات الممكنة. على سبيل المثال، تحتاج إلى تغيير الشرط في حلقة for لتكون “i < charArray.Length" بدلاً من "i < 1" لتكون قادرًا على الوصول إلى جميع الأحرف في الكلمة. الشيفرة المعدلة ستكون كالتالي:
csharpstatic void Main(string[] args)
{
string[] lines = System.IO.File.ReadAllLines(@"C:\palindromy.txt");
string longestPalindrome = string.Empty;
string shortestPalindrome = string.Empty;
foreach (string line in lines)
{
char[] charArray = line.ToCharArray();
// Initialize longest and shortest palindromes with the first word in the file
if (string.IsNullOrEmpty(longestPalindrome))
longestPalindrome = line;
if (string.IsNullOrEmpty(shortestPalindrome))
shortestPalindrome = line;
for (int i = 0; i < charArray.Length; i++)
{
char[] reversedArray = (char[])charArray.Clone();
Array.Reverse(reversedArray);
bool isPalindrome = charArray.SequenceEqual(reversedArray);
if (isPalindrome)
{
// Update longest palindrome
if (line.Length > longestPalindrome.Length)
longestPalindrome = line;
// Update shortest palindrome
if (line.Length < shortestPalindrome.Length)
shortestPalindrome = line;
// Break the loop once a palindrome is found in the current word
break;
}
}
}
// Output the longest and shortest palindromes
Console.WriteLine("Longest Palindrome: " + longestPalindrome);
Console.WriteLine("Shortest Palindrome: " + shortestPalindrome);
}
الآن، قمت بإضافة متغيرين جديدين، longestPalindrome
و shortestPalindrome
، لتخزين أطول وأقصر كلمة بالنسبة للباليندروم في الملف. في كل تكرار في حلقة الـ foreach
، يتم التحقق من إذا كانت الكلمة الحالية تحتوي على باليندروم وإذا كان الأمر كذلك، يتم التحقق مما إذا كانت هذه الكلمة هي الأطول أو الأقصر بالمقارنة مع السابق. يتم طباعة النتائج في النهاية.
المزيد من المعلومات
فيما يخص البرنامج الذي قمت بتطويره، يمكننا إجراء بعض التحسينات لتحسين أدائه وفهمه. يمكن أن تكون الإصدارات الأحدث من لغة C# قد أدخلت بعض التحسينات التي يمكننا الاستفادة منها. إليك نسخة معدلة من الشيفرة:
csharpstatic void Main(string[] args)
{
string[] lines = System.IO.File.ReadAllLines(@"C:\palindromy.txt");
string longestPalindrome = string.Empty;
string shortestPalindrome = string.Empty;
foreach (string line in lines)
{
string cleanedLine = CleanString(line);
// Initialize longest and shortest palindromes with the first word in the file
if (string.IsNullOrEmpty(longestPalindrome))
longestPalindrome = cleanedLine;
if (string.IsNullOrEmpty(shortestPalindrome))
shortestPalindrome = cleanedLine;
bool isPalindrome = IsPalindrome(cleanedLine);
if (isPalindrome)
{
// Update longest palindrome
if (cleanedLine.Length > longestPalindrome.Length)
longestPalindrome = cleanedLine;
// Update shortest palindrome
if (cleanedLine.Length < shortestPalindrome.Length)
shortestPalindrome = cleanedLine;
}
}
// Output the longest and shortest palindromes
Console.WriteLine("Longest Palindrome: " + longestPalindrome);
Console.WriteLine("Shortest Palindrome: " + shortestPalindrome);
}
static string CleanString(string input)
{
// Remove non-alphabetic characters and convert to lowercase
return new string(input.Where(char.IsLetter).Select(char.ToLower).ToArray());
}
static bool IsPalindrome(string input)
{
// Check if the string is a palindrome
return input.SequenceEqual(input.Reverse());
}
تمت إضافة دوال جديدة لتحسين قراءة الشيفرة وجعلها أكثر فهمًا. تم إضافة دالة CleanString
لإزالة جميع الأحرف غير الأبجدية وتحويل السلسلة إلى أحرف صغيرة. كما تم إضافة دالة IsPalindrome
لفحص ما إذا كانت السلسلة هي باليندروم أم لا. هذه الإضافات تجعل الشيفرة أكثر فهمًا وسهولة صيانة.