![]() |
Werden weitere Bedingungen geprüft wenn das Ergebnis..
...schon klar ist?
In Delphi hatte ich folgende Funktion:
Delphi-Quellcode:
Sie kann _niemals_ einen Fehler verursachen indem "S[I-1]" kleiner ist als 1, bedingt durch die vorigen Bedingungen.
function TTokenizer.NumTok(const S: string): Integer;
var I: Integer; begin Result := 0; for I := 1 to Length(S) do if (S[I] <> C) and ((I = 1) or (S[I-1] = C)) then Inc(Result); end; Ich habe mir den Code nun in C# umgeschrieben:
Code:
public static int NumTok(string S, char C)
{ int Count = 0; for(int i = 0; i <= S.Length; i++) if(((S[i] != C) && (i == 1)) || (S[i-1] == C)) Count++; return Count; } Nun bekomm ich ich beim aufruf von:
Code:
den Fehler:
textBox1.Text = Tokenizer.NumTok("blubb.jo", '.').ToString();
Zitat:
|
Re: Werden weitere Bedingungen geprüft wenn das Ergebnis..
Hallo!
Zum einen schaut mir die Klammerung der beiden Ausdrücke (also Delphi und C#) nicht identisch aus. Kann aber auch täuschen ;-) Zum anderen lässt Du den Index in C# bis zu S.Length laufen. Richtig wäre S.Length-1, weil ja auch schon bei 0 gestartet wird. Also aus dem "<=" ein "<" machen. Grüße Christian |
Re: Werden weitere Bedingungen geprüft wenn das Ergebnis..
Hi,
Code:
Müssten die Klammern nicht so gesetzt werden, damit es wieder auf den Delphi-Code passt?
if((S[i] != C) && ((i == 1) || (S[i-1] == C)))
|
Re: Werden weitere Bedingungen geprüft wenn das Ergebnis..
Moin Christian,
mit -1 bekomme ich immernoch den Fehler ;). @Spider: Nope, es muss "entweder die ersten beiden oder nur das letzte" nicht aber "nur das erste oder die letzteren beiden" |
Re: Werden weitere Bedingungen geprüft wenn das Ergebnis..
fang mal die Exception ab und lass dir im except-Teil den index ausgeben, bei dem die Exception ausgelöst wurde. Wenn dieser bspw. 0 ist wäre das Problem ja relativ klar ;)
greetz Mike |
Re: Werden weitere Bedingungen geprüft wenn das Ergebnis..
Zitat:
|
Re: Werden weitere Bedingungen geprüft wenn das Ergebnis..
Stimmt, jetzt wo Du(ihr) es sagt... die C# Variante stimmt von den Klammenr her nicht :mrgreen:
Danke :P |
Re: Werden weitere Bedingungen geprüft wenn das Ergebnis..
Deine Tokenizerfunktionen sind in .Net schlichtweg nicht mehr notwendig. ;)
Code:
Oder in meiner fav. .Net-Sprache:
string[] tokens = "blubb.jo".Split(new char[1] {'.'});
int countTokens = tokens.Length; foreach(string token in tokens) Console.WriteLine(token);
Delphi-Quellcode:
var tokens := 'blubb.jo'.Split(['.']);
var countTokens := tokens.Length; for token : String in tokens do Console.WriteLine(token); |
Re: Werden weitere Bedingungen geprüft wenn das Ergebnis..
Ahh wow, wusste gar nicht, dass es da sowas gibt - Genial.
Danke :))) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz