Ik ben gister een topic gestart over arrays in php. Deze topic is inmiddels opgelost, maar nu ben ik nieuwsgierig hoe ik dit zelfde probleem oplos met behulp van C#.
Bedankt alvast voor al jullie reacties!
Martijn
14 antwoorden
Gesponsorde links
Abbas - 12/01/2009 17:26 (laatste wijziging 12/01/2009 17:27)
Ik heb ervoor gekozen om er een Console Application van te maken. Het lijkt me leuk om wat invoer controles op de invoer uit te voeren, zodat ik een beetje een idee krijg hoe dat ongeveer werkt in C#.
Ben namelijk de afgelopen tijd erg veel bezig geweest met PHP. C# is weer eens wat anders, er zit nog een extra uitdaging in !
Oja, voordat ik het vergeet ik krijg de volgende error melding op mijn code: " Use of unssigned local variable `result` ". Waarschijnlijk begrijp jij wel wat ik verkeerd doe. Tijd voor een stukje code :
Ja, dat klopt, daar heb je gelijk in. Ik dacht namelijk dat mijn declaratie wel voldoende was, maar inderdaad, ben vergeten te initialiseren. Heb dus wel een geheugenplaats gereserveerd, maar was deze vergeten te vullen. Nu heb ik dus de declaratie van Titjes overgenomen. Deze dus:
Maar ik hou dezelfde error op mijn code. Heeft iemand misschien een idee wat ik verkeerd doe?
P.s. @Titjes Haha, tegelijk een reactie toegevoegd. Heb jou advies overgenomen, maar evengoed, ik hou die error op " result ". Mijn code ziet er nu zo uit.
Abbas - 12/01/2009 18:41 (laatste wijziging 12/01/2009 18:41)
foreach (char c in input)
{
result = strArray[c - 97];
Console.WriteLine(result);
}
foreach(char c in input)
{
result = strArray[c -97];
Console.WriteLine(result);
}
Ik krijg dan geen enkele fout, ik heb volledig dezelfde code als jou met enkel de aanpassing die ik net heb gegeven. Het enige dat er fout kan gaan is als je hoofdletters gebruikt omdat de ASCII-code van deze karakters buiten de index van de array zullen vallen. Het enige dat je hier nu als invoer mag gebruiken zijn de letters van 'a' tot en met 'z', geen hoofdletters of speciale tekens dus!
foreach (char c in input)
{
if (c >= 65 && c <= 90)
{
//'c' is een hoofdletter
//ASCII-waarde min 65 doen voor de array
index = c - 65;
}
else
{
if (c >= 90 && c <= 122)
{
//'c' is een kleine letter
//ASCII-waarde min 97 doen voor de array
index = c - 97;
}
else
{
//'c' is geen letter
//index op 26 zetten
//in de array is dat dan "Unknown Char"
index = 26;
}
}
result = strArray[index];
Console.WriteLine(result);
}
foreach(char c in input)
{
if(c >=65&& c <=90)
{
//'c' is een hoofdletter
//ASCII-waarde min 65 doen voor de array
index = c -65;
}
else
{
if(c >=90&& c <=122)
{
//'c' is een kleine letter
//ASCII-waarde min 97 doen voor de array
index = c -97;
}
else
{
//'c' is geen letter
//index op 26 zetten
//in de array is dat dan "Unknown Char"
index =26;
}
}
result = strArray[index];
Console.WriteLine(result);
}
Je moet dan enkel nog in je array een laatste element bijvoegen, namelijk "Unknown Character" of iets dergelijks. Daarom die "index = 26" als de ASCII-waarde geen letter voorstelt.
Of je kan natuurlijk ook de korte versie van de if-tag gebruiken:
Error 1 A local variable named 'c' cannot be declared in this scope because it would give a different meaning to 'c', which is already used in a 'parent or current' scope to denote something else
Error 1 A local variable named 'c' cannot be declared in this scope because it would give a different meaning to 'c', which is already used in a 'parent or current' scope to denote something else
Abbas - 12/01/2009 22:29 (laatste wijziging 12/01/2009 22:30)
Crew .NET
Vrij logisch, je zet twee keer dezelfde foreach-loop in elkaar... Een keer is genoeg! Hier is de correcte code, met ook ineens de extra "Unknown Char" in de array, want dat was ook nog niet gebeurd. Succes!