d从串中删非数字
import std.stdio;
import std.algorithm : find, filter;
import std.conv : to;
import std.uni : isNumber;
void main(string[] args){
if (args.length > 1){
auto filtered = () {
auto r = args[1].find!isNumber;//检查串包含整
return r.length ?
r.filter!isNumber.to!string // 保留整
: args[1]; // 不变
} ();
filtered.writeln;
} else {
write("写参");
}
}
旧C方式:
import std.stdio;
void main(){
string s, str = "4A0B1de!2C9~6";
foreach(i;str){
if(i < '0' || i > '9'){ continue; }
s ~= i;
}
writeln("Result: ", s);
}
这样:
void main() {
string s = "blahblah123blehbleh456bluhbluh";
auto result = s.filter!(ch => ch.isDigit).to!int;//可转为长.或`串`.
assert(result == 123456);
}
3行能搞定,为何写6行.
这样:
void main(){
string s, str = "4A0B1de!2C9~6";
foreach(i;str){
(i >= '0' && i <= '9') ? s~=i : null;
}
writeln(s);
}
简单C方式.
不操作值,还可更简单:
void main() {
string s = "blahblah123blehbleh456bluhbluh";
writeln(s.filter!(ch => ch.isDigit));
}
没有存储,直接输出至标出.
浙公网安备 33010602011771号