Porównywanie tablicy char[] do listy tablic char []

0

Witam!
Mam listę tablic char [] o nazwie etykiety, zawierającą wszystkie etykiety potrzebne do skoków w maszynie RAM zebrane podczas pierwszego odczytu pola tekstowego zawierającego program. W dalszym ciągu sprawdzam i wykonuję program rozkaz po rozkazie.
Gdy natrafiam na instrukcję skoku wczytuje do listy znajdujący się za nią ciąg znaków i konwertuję na tablicę char [].

I teraz jest pies pogrzebany, bo nie mogę porównać tej tymczasowej etykiety (et_temp) z elementami listy

int size = etykieta_temp.Count() + 1;// 
			et_tmp = new char [size+1];//tworzy ciag znakow o dlugosci size
			for (int s = 0;;s++)
			{
                if (s >= etykieta_temp.Count()) break;// 
				et_tmp = etykieta_temp.ToArray();//wypelnia go elementami wektora
			}
				for(int o = 0;o<etykiety.Count();++o) //sprawdzam czy etykieta pasuje do zbiotu etykiet
			{
				if (et_tmp.Equals(etykiety[o])) //jesli tak
				{
                    z = index_etykiety[o]; 
					break;
				}
				else z++; //w przeciwnym wypadku kontynuuje wykonanie programu
			}
			etykieta_temp.Clear(); 

No i mimo zgodności pomiędzy etykietami licznik rozkazów (z) się nie cofa tylko wykonuje operacje dalej.

0

Po co wywołujesz wszędzie metodę Count()? To tylko spowalnia program, używaj właściwości Length dla tablic oraz Count dla innych struktur danych.

O ile dobrze rozumiem, to et_temp.Equals(edykiety[0]) to próba porównania dwóch tablic. Equals dla tablic jest porównanie referencji, wiec dwie różne tablice, nawet jeśli ich elementy są identyczne zostaną uznane za różne. Musisz po prostu porównać poszczególne elementy tych tablic.

0

ale dlaczego w ogóle ciągi znaków trzymasz jako char[] zamiast string?

0

Nie stosuje stringów, ponieważ przekazują do listy nie swoją wartość, ale

[0] = "System.Collections.Generic.List`1[System.Char]" 

Co powoduje ze program zawsze skacze do tej samej (pierwszej etykiety), bo wszystkie wyglądają tak samo.
Próbowałem przyrównywać elementy pojedynczo ale mam problem z iteracją listy.
O ile dla char[] et_tmp nie ma problemu bo można wyłuskać pojedynczą wartość w pętli for

et_tmp[i] 

ale z listą już nie jest tak kolorowo bo powiedzmy że wybralismy pierwszą ze zbioru etykiet etykiety[0]

, co nam zwróci całą tablicę char [] a jak się dostać do pojedynczego jej elementu?
0

Nie stosuje stringów, ponieważ przekazują do listy nie swoją wartość, ale
[0] = "System.Collections.Generic.List`1[System.Char]"
Co powoduje ze program zawsze skacze do tej samej (pierwszej etykiety), bo wszystkie wyglądają tak samo.

że co???

a jak się dostać do pojedynczego jej elementu?

etykiety[0][i]
2

To jest klasyczny przykład osoby która przeczytała tylko pierwszą lekcję z kursu programowania i próbuje napisać coś dużego. Że akurat nie doczytał jak sie korzysta ze stringów czy tablic, albo pętli to ich nie używa. Dziwi mnie trochę takie podejście, bo gdyby zamiast bezmyślnego klepania takich potworków siąść i poduczyć się podstaw to na prawdę dałoby się to łatwo i prosto napisać.
Bo programowanie nie polega na tym żeby nabazgrać tysiące linii kodu (w większości metodą copy-paste) który wreszcie zacznie działać. Sztuką jest napisać to samo w 30 linijkach, tak żeby było eleganckie i przejrzyste. Po to języki udostępniają pewne poziomy abstrakcji -> struktury, funkcje, klasy, polimorfizm, typy generyczne. Ale jak się komuś tego nie chce uczyć i uważa że jest mu to zbędne...

0
Shalom napisał(a)

Ale jak się komuś tego nie chce uczyć i uważa że jest mu to zbędne...
No i tu dochodzimy do odwiecznego problemu filozoficznego co było pierwsze człowiek czy lenistwo?

0

Witam!
Może to i prawda, że jestem leniwy, a na pewno jest prawdą, że C# umiem słabo, bo napisałem tylko kilka programików typu "Hello World", ale C# miałem tylko na jednym wykładzie i jedyną przydatną rzeczą jaką się na nim dowiedziałem to, że przy polimorfizmie używa się słowa kluczowego

override 

co nie zmienia faktu, że termin oddania projektu, jak słusznie zauważyliście maszyny RAM, zbliża się nieubłaganie, a ja jestem cały czas w polu. Korzystam z dokumentacji na msdn i kursów na centrumxp.pl i wikibooks, ale nie zawsze jestem tam wstanie rozwiązać swój problem i wtedy zwracam się do Was. Nie myślcie sobie też, że pisanie tego programu to jedyne co mam do zrobienia, Politechnika doskonale troszczy się o czas wolny swoich studentów, czyli mam jeszcze projekty w assemblerze 8086 plus bieżące programiki, naukę na koła itp.

Reasumując: Nie chcę żebyście myśleli, że się żalę, bo sam sobie wybrałem taki kierunek i nie żałuję, ale oskarżanie ludzi o lenistwo, bez jakiejkolwiek wiedzy o nich jest "lekko" niesprawiedliwe. Gdybym miał czas sobie spokojnie usiąść nad tym projektem, to uwierzcie, że bym to zrobił, a tak to jadę po linii najmniejszego oporu byleby działało.

Tutaj macie pełen kod programu: http://pastebin.com/tbaBpwKB

0
Maleficus03 napisał(a)

Gdybym miał czas sobie spokojnie usiąść nad tym projektem, to uwierzcie, że bym to zrobił, a tak to jadę po linii najmniejszego oporu byleby działało.

Linii najmniejszego oporu. To opór może być większy albo mniejszy, nie linia. Ten przymiotnik w ogóle nie ma zastosowania do słowa linia, bo te mogą być dłuższe lub krótsze, ale nigdy mniejsze. (Przepraszam, musiałem. Ukończenie szkoły podstawowej zobowiązuje.)

Robiąc cokolwiek mamy dwa wyjścia:

  1. Zrobić to niechlujnie.
  2. Zrobić to porządnie.

W przypadku 1 można szybko zacząć, w przypadku 2 nie, bo potrzeba do tego jakiejś wiedzy. W przypadku bardzo łatwych rzeczy opcja 1 jest szybsza, natomiast w przypadku wszystkich innych 2 będzie szybsza. Dlaczego? Bo rozwiązywanie sztucznych problemów, które sobie namnożymy przez naszą niewiedzę w pewnym momencie zajmie więcej czasu niż nauka oraz wykonanie czegoś porządnie. Ty teraz jesteś ofiarą swojego podejścia i problemów, które sobie stworzyłeś.

BTW: Chyba jednak powinienem skończyć Politechnikę, to bym umiał pisać metody na 500 linii kodu, bo teraz jest to dla mnie niewyobrażalne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1