我在努力学习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