2016-05-28 5 views
1

私はパラメータとしてstringAとstringBをとり、stringBの最初の文字とStringAの最後の文字を比較する関数を書いています。等しい場合、関数はtrueを返し、そうでない場合はfalseを返します。長さが不明な文字列の最後の文字を抽出する方法は?

私はほとんどすべての機能を用意していますが、文字列Aの最後の文字は取得できません。私は文書をチェックして何も見つけられませんでした。助言がありますか?

(cond 
    [(string=? (substring stringA ???) (substring stringB 0 2))"True"] 
    [else "False"]) 

答えて

3

にあなたの最後の文字を抽出することができラケットに私はこの発見しましたstring-length(というか1未満)を使用して、文字列の最後の文字位置を取得することができます。

(string-ref str (sub1 (string-length str))) 

ありません文字は、長さ1の文字列とは異なります。。したがって、文字を抽出する正しい方法は、substringではなく、string-refなどです。

+0

サブ1の由来を説明できますか?私はこれをやってみましたが、目的がまだわかりません。ありがとう – AlwaysLearning

+1

'sub1'はゼロベースのインデックスを使用しています。 1ベースのインデックス作成では、インデックスは「1」から「n」になり、「n」は長さですが、ゼロベースのインデックスでは、それらは「0」から「n-1」になります。 ) '。 –

0

関数string-take-rightを使用することもできます。これは、引数文字列の最後のn文字列を文字列として返します。

1

クリスがあなたの質問に答えたようです。文字を返すstring-refを使うには、比較関数char =?を使うべきです。 (または?と等しい)。

私はもっと精巧だが、(パッケージコレクションのインストール後に)惑星ラケットからコレクションをダウンロードする必要がある別のソリューションを追加したいと思います。 collectionsパッケージを使用すると、モジュールの(最後の..)関数と(最初の..)関数を使用して、単に文字列ではなく、すべてのコレクションで同じ関数を使用できます。

(require data/collection) 

(let ([stringA "abcd"] 
     [stringB "dcba"]) 
    (cond 
    [(equal? (last stringA) 
      (first stringB)) "True"] 
    [else "False"])) 
+0

'eqv? 'を使って文字を比較することもできます。しかし、わかりやすいように、別の理由がない限り、 'char =?'が好きです。 –

関連する問題