login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Werken met arrays in C#

Offline Martijn2008 - 12/01/2009 16:09
Avatar van Martijn2008PHP beginner Hallo allemaal,

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
Offline Abbas - 12/01/2009 17:26 (laatste wijziging 12/01/2009 17:27)
Avatar van Abbas Gouden medaille

Crew .NET
  1. string result = "";
  2. string[] strArray = { "Letter A", "Letter B", "Letter C", "Letter D", "Letter E", "Letter F" };
  3. foreach (char c in "baf")
  4. result += strArray[c - 97] + Environment.NewLine;
  5. MessageBox.Show(result);
Offline Martijn2008 - 12/01/2009 18:07
Avatar van Martijn2008 PHP beginner Geweldig, dat werkt gewoon. Bedankt!

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 :

  1. static void Main(string[] args)
  2. {
  3. string input;
  4. string result;
  5. string[] strArray = { "Letter A", "Letter B", "Letter C",
  6. "Letter D", "Letter E", "Letter F",
  7. "Letter G", "Letter H", "Letter I",
  8. "Letter J", "Letter K", "Letter L",
  9. "Letter M", "Letter N", "Letter O",
  10. "Letter P", "Letter Q", "Letter R",
  11. "Letter S", "Letter T", "Letter U",
  12. "Letter V", "Letter W", "Letter X",
  13. "Letter Y", "Letter Z", };
  14.  
  15. Console.WriteLine("Hallo,\n Tik hier jou naam in: ");
  16. input = Console.ReadLine();
  17.  
  18. foreach (char c in input)
  19. {
  20. result += strArray[c - 97] + Environment.NewLine;
  21. Console.WriteLine(result);
  22. }
  23.  
  24. Console.ReadKey();
  25. }
Offline Stijn - 12/01/2009 18:14 (laatste wijziging 12/01/2009 18:14)
Avatar van Stijn PHP expert Je doet result += maar je hebt nog nergens result geïnitialiseerd (zie titjes declaratie van result).
Offline Abbas - 12/01/2009 18:20
Avatar van Abbas Gouden medaille

Crew .NET
Inderdaad, en doe hetzelfde dan ineens bij input:

  1. string result = "", input = "";
Offline Martijn2008 - 12/01/2009 18:28 (laatste wijziging 12/01/2009 18:33)
Avatar van Martijn2008 PHP beginner 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:

  1. string result = "";


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.
Offline Abbas - 12/01/2009 18:41 (laatste wijziging 12/01/2009 18:41)
Avatar van Abbas Gouden medaille

Crew .NET
Maak eens het volgende van je for-loop:

  1. foreach (char c in input)
  2. {
  3. result = strArray[c - 97];
  4. Console.WriteLine(result);
  5. }

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! 
Offline Martijn2008 - 12/01/2009 19:08
Avatar van Martijn2008 PHP beginner Met invoer controles zou je dat toch kunnen oplossen, want dat probleem wat jij daarnet opmerkt kom ik nu dus tegen.
Offline Abbas - 12/01/2009 19:28 (laatste wijziging 12/01/2009 19:58)
Avatar van Abbas Gouden medaille

Crew .NET
Als je alleen letters toestaat, hoofdletter of niet, kan je dit doen:

  1. foreach (char c in input)
  2. {
  3. if (c >= 65 && c <= 90)
  4. {
  5. //'c' is een hoofdletter
  6. //ASCII-waarde min 65 doen voor de array
  7. index = c - 65;
  8. }
  9. else
  10. {
  11. if (c >= 90 && c <= 122)
  12. {
  13. //'c' is een kleine letter
  14. //ASCII-waarde min 97 doen voor de array
  15. index = c - 97;
  16. }
  17. else
  18. {
  19. //'c' is geen letter
  20. //index op 26 zetten
  21. //in de array is dat dan "Unknown Char"
  22. index = 26;
  23. }
  24. }
  25. result = strArray[index];
  26. Console.WriteLine(result);
  27. }

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:

  1. index = (c >= 97 && c <= 122) ? c - 97 : (index = (c >= 65 && c <= 90) ? c - 65 : 26);
Offline Martijn2008 - 12/01/2009 19:42
Avatar van Martijn2008 PHP beginner Interessant ! Ik ga er even mee experimenteren. Is er een site waar die hele ASCII tabel op staat? 
Offline Abbas - 12/01/2009 19:43
Avatar van Abbas Gouden medaille

Crew .NET
http://www.asciitable.com/

Dus op dezelfde manier als hierboven kan je controle doen op alle karakters die je maar wil! 
Bedankt door: xSc
Offline Martijn2008 - 12/01/2009 20:37
Avatar van Martijn2008 PHP beginner De code herhaald de letters iedere keer, terwijl de output dit moet zijn:

  1. Letter M
  2. Letter A
  3. Letter R
  4. Letter T
  5. Letter I
  6. Letter J
  7. Letter N
Offline Abbas - 12/01/2009 21:38
Avatar van Abbas Gouden medaille

Crew .NET
Maak van:

  1. result = strArray[index];
  2. Console.WriteLine(result);

Eens het volgende:

  1. Console.WriteLine(strArray[index]);


;-)
Offline Martijn2008 - 12/01/2009 22:21 (laatste wijziging 12/01/2009 22:23)
Avatar van Martijn2008 PHP beginner Ik heb het aangepast, maar krijg een aantal errors:

  1. 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


Deze error wordt meerdere keren herhaald:

  1. Error 2 The name 'index' does not exist in the current context


Klik hier voor de code die ik nu heb.
Offline Abbas - 12/01/2009 22:29 (laatste wijziging 12/01/2009 22:30)
Avatar van Abbas Gouden medaille

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! 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.221s