2016-10-17 2 views
0

ユーザーの入力単語から文字数を数えて表示しようとしています。文字を文字列に変更する方法はわかりましたが、文字数とともに["]"が表示されます。私はそれを数えて表示するだけです。例:ユーザー入力テスト、 手紙:カウント E:1、 S:1、 トン:2 (それがプログラムにすべきであるように表示するようにそれを得ることはできません) charcountに辞書内のキーの数:3ユーザーの入力から文字を数えようとしていますが、ユーザーの入力語だけでなく、[""]もカウントしています。

import Foundation 
var myWord: [String] = [] //Array for word given by user 
//var count = 0 //create a variable to hold the count for any matches 


//get input from user - must use Objective C code since Swift 1+ doesn't have an input function (code used from Dawn Wick StudentTests code) 
func input() -> String { 
    let keyboard = NSFileHandle.fileHandleWithStandardInput() 
    let inputData = keyboard.availableData 
    let strData = NSString(data: inputData, encoding: NSUTF8StringEncoding)! 
    return strData.stringByTrimmingCharactersInSet(NSCharacterSet.newlineCharacterSet()) 
} 

print("Enter a word: ", terminator: "") 

var userWord = input()  // get users word 
myWord.append(userWord) //Append myWord array with user input 

//Summarize character counts 
var charCount: [Character : Int] = [:] 

//Summarize occurences of each character 
for char in myWord.description.characters{ 
    //if char in Dictionary, increment count, otherwise add it 
    if let count = charCount[char] { 
     charCount[char] = count + 1 //increment count 
    }else { 
     charCount[char] = 1 //add char to dictionary 
    } 
} 


print("THE WORD \(myWord) CONTAINS:", terminator: " "); 
print("\nLETTERS\t\t COUNT\n", terminator: " "); 
for (char, count) in charCount { 
    print("\n \(char) \t \(count)", terminator: " "); 
} 
print("\nNumber OF KEYS IN CHARCOUNTS DICTIONARY: \(charCount.count)", terminator: " "); 

私は非常に助けに感謝します。 ありがとうございます。

+0

一つのアプローチはに正規表現を使用することですあなたの数える前にすべての文字を抽出します。もう1つの方法は、マップを使用して52文字をハードコードし、その数が追加される前にこのマップに文字が存在するかどうかを確認することです。 – Mox

+0

私はこのクラスの基礎を素早く学び、学ぶのが新しいです。私は、あなたが話している選択肢について何の手掛かりも持っていません。私はやってみたいです。 – Naro

答えて

0

myWord.description.charactersを使用しているため、[]"が表示されます。

あなたが使用する必要があります。

myWord.forEach { 
    $0.characters.forEach { 
     charCount[$0] = (charCount[$0] ?? 0) + 1 
    } 
} 

をすべてCharactersをカウントし、辞書に入れているので、あなたはそれを少し簡略化することができます:

myWord.flatMap { $0.characters }.forEach { 
    charCount[$0] = (charCount[$0] ?? 0) + 1 
} 
+0

ありがとうございました。それは必要と同じように機能しました。喜んでこのサイトは、この本のようなものは何もカバーしていないからです。 – Naro

+0

あなたはそうです、本当にとても有用です!私は単純なバージョンを追加して、少し答えを更新しました:)。 – Eendje

関連する問題