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));
}

没有存储,直接输出至标出.

posted @ 2022-03-04 09:00  zjh6  阅读(26)  评论(0)    收藏  举报  来源