2017-04-06 17 views
1

私がしたいのは、Stringに変換し、その後.uppercased()を呼び出すオーバーヘッドなしで、単一のCharacterを大文字に変換することです。これを行うための組み込み方法がありますか、あるいは私がtoupper()関数をCから呼び出す方法はありませんか?私は本当に簡単なことのために自分の道を離れなければならないとは思わない。どのようにして1つの文字タイプを大文字に変換できますか?

+5

を私はあなたが文字列を経由して行かなければならないと思います。また、大文字の1文字は、複数の文字を含む文字列にすることができます。 "ß"→ "SS"。 –

+0

また、 'toupper()'は 'char'に対してのみ動作し、ロケールに依存します。 –

+0

別の例:「ffi」(結紮)→「FFI」。または "ᾀ"(いくつかのギリシャ語の手紙) - > "ἈΙ" –

答えて

3

C toupper()を呼び出すには、CharacterのUnicodeコードポイントを取得する必要があります。しかし、Characterにはコードポイントを取得する方法がありません(Characterは複数のコードポイントで構成されている可能性があります)ので、コードポイントを取得するにはStringCharacterを変換する必要があります。

だから、どこにでも行くには、実際にStringに変換する必要があります。文字をCharacterの代わりにUnicodeScalarとして保存しない限り。

assert(unicodeScalar.isASCII) // toupper argument must be "representable as an unsigned char" 
let uppercase = UnicodeScalar(toupper(CInt(unicodeScalar.value))) 

をしかし、これは本当に単純Stringを使用するよりも読みやすいではありません:この場合は、あなたがこれを行うことができます

let uppercase = Character(String(character).uppercased()) 
+2

最後の行は実行時にクラッシュする可能性があることに注意してください。 'character ="ß "'(これらのクレイジードイツ人:) –

関連する問題