2

環境

次の方法で生成できるすべての文字を生成したい:

  • メモ帳を開く
  • キーボードの単一のキーを押す
  • Shift キーを押しながらキーボードの 1 つのキーを押す

私が現在持っているもの:

(concat (range (int \a) (int \z))
  (range (int \A) (int \Z))
  (range (int \0) (int \9)))

次に、 ~!@#$%^&*()_+{}|:"<>?,./;'[]\ のような文字を手動で追加します

質問

これを行うよりエレガントな方法はありますか?

編集

はい、私は米国の Qwerty キーボードについて言及しています。

4

2 に答える 2

3

US ASCIIチャートを見ると、必要なすべての文字が内にあるように見えます(range 33 127)。したがって、これらすべての文字のシーケンスを取得する最も簡単な方法は、その範囲を文字に変換することです。

(map char (range 33 127))

ただし、文字列にこれらの文字のみが含まれていることを検証しようとしている場合は、次のような関数を使用してください。

(defn valid-char? [c]
  (let [i (int c)] 
    (and (> i 32) (< i 127))))

次に、それを使用してevery?文字列を検証できます。

user=> (every? valid-char? "hello world")
true
user=> (every? valid-char? "héllo world")
false
于 2012-05-23T03:04:20.410 に答える
1

次のマップ フォームを使用すると、必要な文字が生成されます。

(map #(str (char %)) (range 32 127))
于 2012-05-23T03:01:48.540 に答える