A műveletvégző MoneyToString metódust egy osztály statikus függvényeként hozzuk létre. A létrehozandó metódus az 1 milliárdos nagyságrend alatti értékeket képes szöveggé konvertálni.
Létrehoztunk tehát egy Converter nevű osztályt az alkalmazás NTSConverter névterében, melyet a Converter.cs állományban helyezünk el:
using System;
namespace NTSConverter
{
public class Converter
{
Deklarálunk három tömböt a karakterláncoknak, melyeket meghatározott logika szerint adunk az eredmény-karakterlánchoz.
private static string[] CONES = {"", "egy", "kettő", "három", "négy", "öt", "hat", "hét", "nyolc", "kilenc"};
private static string[] CTENS = {"", "tíz", "húsz", "harminc", "negyven", "ötven", "hatvan", "hetven", "nyolcvan", "kilencven"};
private static string[] CUTAG = {"", "ezer", "millió"};
Felveszünk egy változót az eredmény karakterlánc számára, valamint egyet az esetleges elválasztás-jel tárolására, melyet 2000-nél nagyobb értékű számok esetén szúrunk be a karakterláncba, a helyesírási szabályoknak megfelelően.
private static string sep = "";
private static string resultString = "";
A statikus metódusnak szüksége van néhány műveletre, melyeket szintén statikus metódusokban helyeztünk el, hogy azok elérhetők legyenek az osztály példányosítása nélkül. Az első művelet a paraméterként kapott karakterláncot az eredmény lánc elé szúrja, valamint megvizsgálja, hogy szükséges-e elválasztójelet beszúrni a karakterláncba. Szükség esetén beszúrja:
private static void AddNum(string ns,Int64 money)
{
resultString = ns + resultString;
if ((resultString != "") && (money > 2000))
{
sep = "-";
}
}
A második műveletben a CONES tömb egy elemét adja vissza a metódus attól függően, hogy a megadott számérték karakterlánccá alakítva milyen hosszal rendelkezik:
private static string Ones(string moneyStr,int moneyStrLen)
{
string res = CONES[Convert.ToByte(moneyStr[moneyStrLen-1]) - 48];
return res;
}
A harmadik művelet a CTENS karaktertömb egy elemét adja vissza attól függően, hogy éppen melyik elemét vizsgáljuk a számértékből képzett karakterláncnak:
private static string Tens(string moneyStr,int moneyStrLen)
{
string res = "";
switch(moneyStr[moneyStrLen])
{
Ha az adott karakter 1, akkor két értéket adhat vissza a függvény attól függően, hogy a karaktert nulla követi vagy sem:
case '1':
if (moneyStr[moneyStrLen+1] == '0')
{
res = "tíz";
}
else
{
res = "tizen";
}
break;
Csakúgy, mint 2 esetén:
case '2':
if (moneyStr[moneyStrLen+1] == '0')
{
res = "húsz";
}
else
{
res = "huszon";
}
break;
Minden egyéb esetben:
default:
res = CTENS[Convert.ToByte(moneyStr[moneyStrLen]) - 48];
break;
}
return res;
}
A MoneyToString metódus pedig a következőképpen épül fel: először deklarálunk néhány segédváltozót, majd megvizsgáljuk, hogy a megadott érték nulla, vagy sem:
public static string MoneyToString(Int64 money)
{
resultString = "";
sep = "";
string moneyStr = "";
int moneyStrLen = 0;
int i1 = 0;
int i2 = 0;
int i3 = 0;
if (money != 0)
{
Ha nem nulla, akkor ellenőrizzük, hogy a megadott szám tíznél kisebb számjegy hosszú-e:
moneyStr = Convert.ToString(Math.Abs(money));
moneyStrLen = moneyStr.Length;
if (moneyStrLen < 10)
{
Ha igen, akkor elindítunk egy ciklust, melyben csökkentjük a karakterlánc hosszát megadó értéket, amíg az nagyobb, mint 0:
while (moneyStrLen > 0)
{
...
moneyStrLen--;
}
A logika lényege, hogy a megadott számot reprezentáló karakterláncot elemezve fűzzük a lánc elejére a részláncokat, míg végül megkapjuk a teljes szöveget. Természetesen a negatív számok kezelése is megvalósul, ennek érdekében egy ’mínusz’ szó kerül a szöveg elejére:
if (money < 0)
{
resultString = "mínusz " + resultString;
}
}
A tíz karakternél hosszabb számok esetén hibajelzést adunk:
else
{
resultString = "Az érték túl nagy, így nem konvertálható! A konvertálás 9 számjegyig működik!";
}
}
Nullát megadva konvertálandó értékként a ’nulla’ szót adjuk vissza:
else
{
resultString = "nulla";
}
return resultString;
}
}
}
A programban felhasználjuk a MoneyToString statikus metódust, a ’Konvertálás’ feliratú gombra kattintva a megadott számérték az ’Eredmény’ feliratú szövegmezőben jelenik meg konvertálva.