קוד C# להמרת מספר למספר עברי
-
קוד C# להמרת מספר למספר עברי - מקווה שיהיה שימושי למישהו.
using System; public class ClassHebrewNumbering { public static string ToHebrewNumber(int number) { if (number < 1) { throw new ArgumentOutOfRangeException("המספר צריך להיות מעל 1"); } string hebrewNumber = ""; while (number >= 400) { hebrewNumber += "ת"; number -= 400; } // Handle numbers 100-390 if (number >= 300) { hebrewNumber += "ש"; number -= 300; } else if (number >= 200) { hebrewNumber += "ר"; number -= 200; } else if (number >= 100) { hebrewNumber += "ק"; number -= 100; } // Handle numbers 10-90 if (number >= 10) { int tensIndex = (number / 10) - 1; // Subtract 1 to match array indexing hebrewNumber += Tens[tensIndex]; number -= (tensIndex + 1) * 10; // Add 1 back for indexing } // Handle numbers 1-9 if (number > 0) { hebrewNumber += Units[number - 1]; // Subtract 1 to match array indexing } hebrewNumber = hebrewNumber.Replace("יה", "טו"); hebrewNumber = hebrewNumber.Replace("יו", "טז"); //hebrewNumber.Replace("רעב", "ערב"); //hebrewNumber.Replace("רעד", "עדר"); //hebrewNumber.Replace("רע", "ער"); //hebrewNumber.Replace("רצח", "רחצ"); //hebrewNumber.Replace("תשמד", "תדשם"); //hebrewNumber.Replace("שמד", "שדמ"); //hebrewNumber.Replace("שד", "דש"); return hebrewNumber; } private static readonly string[] Units = { "א", "ב", "ג", "ד", "ה", "ו", "ז", "ח", "ט" }; private static readonly string[] Tens = { "י", "כ", "ל", "מ", "נ", "ס", "ע", "פ", "צ", "ק" }; }
-
יש אצלי קוד שכולל שני כיוונים, אבל לא מטפל במקרים מיוחדים כמו שדמ:
public static class HebNumber { static Dictionary<int, string> HebNumbers = new Dictionary<int, String> { {400, "ת"}, {300, "ש"}, {200, "ר"}, {100, "ק"}, {90, "צ"}, {80, "פ"}, {70, "ע"}, {60, "ס"}, {50, "נ"}, {40, "מ"}, {30, "ל"}, {20, "כ"}, {19, "יט"}, {18, "יח"}, {17, "יז"}, {16, "טז"}, {15, "טו"}, {10, "י"}, {9, "ט"}, {8, "ח"}, {7, "ז"}, {6, "ו"}, {5, "ה"}, {4, "ד"}, {3, "ג"}, {2, "ב"}, {1, "א"}, }; public static int ToNumber(this string numHeb) { int last = 0; int total = 0; while (numHeb.Length > 0) { var next = HebNumbers.Where(v => numHeb.EndsWith(v.Value)).OrderBy(v => v.Key).LastOrDefault(); if (next.Key <= last) return -1; last = next.Key; total += last; numHeb = numHeb.Remove(numHeb.Length - next.Value.Length); } return total; } public static string ToHebNumber(this int num) { string result = ""; while (num > 0) { var key = HebNumbers.SkipWhile(pair => pair.Key > num).First(); result += key.Value; num-=key.Key; } return result; } }
-
פוסט זה נמחק!
-
@meir-lamdan פה בפורום יש קוד הרבה יותר טוב
https://tchumim.com/post/1158.הקוד שאליו הפנית ואותו תרגמת אינו טוב (למשל, הוא נכשל מעל 999), וגם הוא בכלל לא בC# למרות שהשאלה שם היא על C#.
אני גם מתפלא למה בחרת בו ולא בקוד של התשובה שהתקבלה שיש לה 5 הצבעות (וענה אותה מישהו עם 111K מוניטין).