2012-06-17 110 views
2

我有一个char[]字符。我想删除空格。我的方法:如何从char []中删除元素?

import std.algorithm; 
import std.ascii; 
// ... 
digits = remove!"isWhite(digits)"(digits); 

但是,这并不工作:

c:\dmd2\windows\bin\..\..\src\phobos\std\functional.d(70): Error: static assert "Bad unary function: isWhite(digits) for type dchar" 

如何从一个char[]删除所有的空格?

回答

4
import std.algorithm; 
import std.stdio; 
import std.uni; 
import std.array; 

void main() { 

    char[] s = "12 abc fg ".dup; 

    writeln(array(s.filter!(x => !x.isWhite))); 
} 

array需要摆脱的filterResult -returntype。但是如果你想和Ranges一起工作,你不必这样做。

+0

谢谢。 'filter'也引起了我的注意,但我认为'remove'是正确的选择。 –

+0

我选择了过滤器,因为它是一个非常强大的工具,与新的lambda表达式结合在一起(它与UFCS看起来非常整齐)。例如。你可以一次性移除所有的空格和一组特殊的字符和所有数字以及字符“ABF”。 – dav1d

2

更经济的版本(即不进行内存分配)就是用这样的std.algorithm.remove(未经测试):

s = remove!isWhite(s); 

你最初的使用移除用于拉姆达整个尝试字符串,但它只需要一个字符。

+0

我只能得到这个工作,如果我将字符串转换为dchar []:s = remove!isWhite(to!(dchar [])(s)); – fwend