我在努力學習D,但由於缺乏文檔(或者我對它的理解)而掙扎,所以我來到了這裏。我今天早些時候已經問過一個不同但不相關的問題。解析D中的一個字符串
無論如何,這裏有雲:
我想解析爲不同的東西的字符串。
字符串格式是一樣的東西:
[<label>] <mnemonic> [parameters]
如果沒有標籤,沒有強制性的空白。參數可以用逗號分隔。參數類型取決於助記符。
我想使用Phobos庫中的std.conv: parse
來幫助我,但我無法理解關於如何解析「單詞」的文檔,例如,在任何一端由空白分隔的某些字符。它適用於整數和int i = parse!int(line)
。但是,如果我要做string s = parse!string(line)
它會抓住整條線。
我用手解析這個,使用char**
(或者ref string
)作爲數據類型,就像我在C中寫這個時一樣。但是我正在學習D而不必這樣做。
我想是這樣做手工:
string get_word(ref string s)
{
int i = 0;
while (i < s.length && isAlphaNum(s[i]))
i++;
string word = s[0 .. i];
s = s[i+1 .. $];
return word;
}
這是一個好辦法做到這一點?有更清潔的方法嗎?更快的方式?也許更安全的方法?我不確定i+1
索引總是存在。
感謝您的幫助!
因爲我遇到過各種各樣的問題,所以我對D的信心已經稍微減弱了。但是,這條路肯定會值得的。
這是否推進字符串?另外,如果它碰到換行符,會發生什麼?另外,它不是通過兩次字符串? 哦,並且它似乎與'.idup'一起使用,你能解釋爲什麼嗎? – Matej
這個小函數只是存儲第一個空白的位置,併爲「;」做同樣的事情。小小的位置顯示你需要用於切片的結束。 – bioinfornatics
有趣,謝謝。但是,我將如何使用countUntil的「isWhite」函數?我似乎無法使其工作。不過,我想要否定「isWhite」。 – Matej