2012-01-23 10 views
-1

s1s2の2つの文字列を指定して、s2caesar cipher of s1かどうかをチェックするチェック機能を実装したいと思います。面はstring->string->boolのように見える必要があります。ocamlのシーザー暗号チェック

問題は、String.length以外の文字列関数を使用することができないため、どのように解決できますか?私は許可されていませんlist arrayiterationsrecursionspattern matchingのみ

私を助けてください。また、上記の制限を持つモジュール関数以外の部分文字列関数をocamlで書く方法を教えてください。

+1

これは宿題ですか?これまでに何を試しましたか? – chrisaycock

+0

@padと私は文字が限られているので私の答えでコードを与えた。聞かせてS1、S2 = \t(*アルファベットマッピングテーブル*) \t文字列キー= "ABCD" \t(*マッピング*) \t文字列mapping_cipher = "CADB" \t String.lengthですs1の場合!= String.lengthですS2をチェック \t \t例外が発生します。 \t else \t \tと一致するs1。[0] –

+0

(*キーストリングの中のある文字とキーストリングからインデックスiを取得し、s2。[0]とmapping_cipher。[i]を一致させると、ここにいくつかの関数と呼び出しを書くことはできますか? \t \t \t *) \t \t \t \t(* Iは、特定の文字列関数と反復せずに再帰的に文字列キーをナビゲートすることができますか? \t \t例えば、私はそれが形式はstring->はstring->ブール値を維持行うことができますどのように? \t \t私は再帰的にどのように呼び出すことができます再帰関数w string.subが許されないならば、s1とs2の残りの部分は? \t \tと私も知りませんs1。[0]それは文字列の操作でもあるため、合法になります。 \t \t \t \t \t \t *) –

答えて

1

おそらくs.[i]を使用して、文字列sのi番目の文字を取得することが許可されていると思います。これはString.getと同じですが、インストラクターはこれらの用語で考えることはできません。文字列の個々の文字を取得する何らかの形式がなければ、これは不可能だと私は信じています。あなたはインストラクターに確かに確認してもらいたいはずですが、文字列を文字列に分離できないようにすることができれば驚くでしょう(Ocamlではパターンマッチングだけではできないことです)。

個々の文字を取得できたら、それを行う方法ははっきりしているはずです(再帰的に各文字列をトラバースするための部分文字列は必要ありません)。

まだ部分文字列を書きたい場合は、String.createやその他の同様の機能にアクセスできないため、部分文字列を作成するのは複雑です。しかし、文字列リテラル("x"など)、文字列内の文字を別の文字に設定する機能(s.[0] <- cなど)、および文字列連結(s1^s2)を使用して、独自のバージョンのString.createを書くことができます。もちろん、これはすべて、これらの演算子が使用されることを前提としています。

+0

yah私はそう思います。その場合、私は新しい部分文字列にstring.create関数を使用することはできません。私はocamlに新しいです。変数をデカールすることなく、またはassignemntを使用することなく、どのようにして部分文字列を作成できますか? –

+0

それは私が部分文字列について考えなかったものです。 (主な質問に答えるには部分文字列は必要ありませんが、なぜそれが必要なのかは確かに分かりますが)私はその質問に答える答えを修正しました。 –

関連する問題