2012-02-06 130 views
4

我試圖找到以字符串列表中的特定字母開頭的單詞。用戶將輸入單詞列表和起始字母。例如,像:查找以列表中的給定字母開頭的單詞

「表鉛筆椅子桌子筆」,「P」

使之與p啓動的話應該顯示,在這種情況下penpencil。我的第一步是使用words函數將字符串拆分爲一個字符串列表。那麼我怎麼才能找到每個單詞開頭的字母呢?該類型的功能將類似於:

--------------Find words Starting with a given letter------------------ 

findWords :: String -> Char -> [String] 
+0

這功課嗎?如果是的話,你應該這樣標記它。 – 2012-02-06 12:53:47

+2

這是哈斯克爾工作量很小的任務類書籍的一個例子。現在,試試吧,如果你還需要我們的幫助,請回到這裏。但是,如果您不再需要我們的幫助,我不會感到驚訝。 – Jasper 2012-02-06 12:55:25

回答

5

您使用filter

foo string = filter startsWithP (words string) 

,那麼你需要定義

startsWithP :: String -> Bool 

更多有用的將是通用的變種

startsWith :: String -> Char -> Bool 

要使用像"foo" `startsWith` 'f'

+0

感謝@dave,有一天我會學習何時需要雙反引號,何時不需要。 – 2012-02-06 13:15:04

+0

反引號僅用於中綴形式,在這種情況下使函數調用更像正確的英文(「foo」startsWith'f')。這和調用完全一樣:'startsWith「foo」'f'' – shang 2012-02-06 13:38:44

+0

@shang我知道,我指的是使用反引號創建內聯代碼塊的標記。因此,要在內聯代碼塊中使用反引號函數應用程序的反引號,有時他們必須通過編寫兩個反引號(我認爲在評論中讓我試試''foo'\'startsWith \''f''),有時顯然不。嗯,不,雙反引號在評論中也表現爲雙反引號,一定是誤解了逃跑規則。 – 2012-02-06 13:45:02

4

提示1:在Haskell中,String定義爲Chars的列表,因此所有列表函數都可用。

1

既然你真的想知道,與給定的字符串開始的字符串(根據您的文章),我會用isPrefixOf功能:

filter ("p" `isPrefixOf`) ["cats", "dogs", "poor boys"] 

功能是作爲Data.List模塊據我記得。

相關問題