rozbicie łańcucha znaków

0

Witam, zakładam temat w dziale C/C++, ale mimo wszystko zagadnienie dotyczy również innych języków.

Na wejściu dostaje łańcuch znaków, np. "nazwaPolecenia parametr1=wartosc1 parametr2=wartosc2"
czyli coś na znak przekazywania parametrów do programu w trybie tekstowym w Windowsie.

Jak najłatwiej było by to zrobić? Nie potrzebuje gotowego kodu, bo sam go napisze. Chodzi jedynie o algorytm postępowania. To pierwsza sprawa.
Druga sprawa to sprawdzenie poprawności całego ciągu. np. jakby ktoś dodatkowo przekazał do tego polecenia wartość: "parametr3=wartosc3" to wyskoczyłby błąd, bo takiego parametru nie można przekazać.

Mam nadzieje że wszystko jest zrozumiałe.

dzięki z góry za pomoc.

0

Algorytm bez użycia wbudowanych fuknckcji split może wyglądać tak (funkcja pokazuje zasadę więc prosze nie czepiać się np tablic). Zabezpieczenie się przed błedami składniowymi zostawiam do samodzielnego rozwiązania.
Funckja w JAVIE wymaga konwersji :)

	boolean rozdziel(String input)
	{
		int state = 0; //0 - command name, 1 - parameter name, 2 - parameter value
		int paramIndex = 0;
		int valueIndex = 0;
		String[] paramNames = {"","","","",""};
		String[] paramValues = {"","","","",""};
		
		String commandName = "";
		for(int i = 0;i<input.length();i++)
		{
			char character;
			switch (character = input.charAt(i))
			{
				case ' ': //start of parameter name
							state = 1;
							paramIndex++;
							break;  
				case '=': //start of parameter value 
							state = 2;
							valueIndex++;
							break; //parameter value
				default:
					switch(state)
					{
						case 0:commandName+=character;break;
						case 1:paramNames[paramIndex]+=character;break;
						case 2:paramValues[valueIndex]+=character;break;
					}
			}
		}
		return true;
	}
0

int main(int argc, char *argv[]) { ..... } ?
Masz podana ilosc parametrow (argc) oraz ich zawartosc (argv). A zawartosc to nazwa parametru, znak '=' i wartosc wedlug twojego przykladu, chyba nie jest ciezko znalezc sposob pobierania danych ;).

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