2014-07-01 5 views
29

है मैं अक्षरों, अंकों और निम्न स्ट्रिंग में विशेष वर्ण की संख्या की गणना करना चाहते हैं:स्विफ्ट: कैसे पता लगाने के लिए अगर पत्र अक्षरांकीय या अंक

let phrase = "The final score was 32-31!" 

मैंने कोशिश की:

for tempChar in phrase { 
    if (tempChar >= "a" && tempChar <= "z") { 
     letterCounter++ 
    } 
// etc. 

लेकिन मुझे त्रुटियां मिल रही हैं। मैं इस पर अन्य रूपों के सभी प्रकार की कोशिश की - अभी भी त्रुटि हो रही है - जैसे:

could not find an overload for '<=' that accepts the supplied arguments 

कोई सुराग?

उत्तर

45

एक संभावित स्विफ्ट समाधान:

var letterCounter = 0 
var digitCount = 0 
let phrase = "The final score was 32-31!" 
for tempChar in phrase.unicodeScalars { 
    if tempChar.isAlpha() { 
     letterCounter++ 
    } else if tempChar.isDigit() { 
     digitCount++ 
    } 
} 

अद्यतन: ऊपर समाधान केवल ASCII वर्ण सेट में पात्रों के साथ काम करता है, यानी यह ए, ई या पत्र के रूप में ø नहीं पहचानता है।

let letters = NSCharacterSet.letterCharacterSet() 
let digits = NSCharacterSet.decimalDigitCharacterSet() 

var letterCount = 0 
var digitCount = 0 

for uni in phrase.unicodeScalars { 
    if letters.longCharacterIsMember(uni.value) { 
     letterCount++ 
    } else if digits.longCharacterIsMember(uni.value) { 
     digitCount++ 
    } 
} 

अद्यतन 2: निम्नलिखित विकल्प समाधान फाउंडेशन ढांचे, जो वर्ण उनके यूनिकोड वर्ण वर्गों के आधार पर परीक्षण कर सकते हैं से NSCharacterSet का उपयोग करता Xcode 6 बीटा 4 के रूप में, पहले समाधान करता है अब काम नहीं करें, क्योंकि isAlpha() और स्विफ्ट से संबंधित (ASCII- केवल) विधियों को हटा दिया गया है। दूसरा समाधान अभी भी काम करता है। स्विफ्ट 3 के लिए


अद्यतन:

let letters = CharacterSet.letters 
let digits = CharacterSet.decimalDigits 

var letterCount = 0 
var digitCount = 0 

for uni in phrase.unicodeScalars { 
    if letters.contains(uni) { 
     letterCount += 1 
    } else if digits.contains(uni) { 
     digitCount += 1 
    } 
} 
+0

हां, कि एकदम सही है - कैसे नरक आप "isAlpha" और के बारे में पता चला " isDigit "????? :-) मैं उन लोगों को भी नहीं जानता था। (गंभीरता से - क्या आपने उन्हें देखा है या आप पहले से ही उनसे पहले यात्रा में भाग चुके हैं?) – sirab333

+0

@ sirab333: 'isalpha() 'और दोस्तों सी में अच्छी तरह से जाना जाता है, उदाहरण के लिए देखें। https://developer.apple.com/library/ios/documentation/System/Conceptual/ManPages_iPhoneOS/man3/ctype.3.html#//apple_ref/doc/man/3/ctype। तो मुझे स्विफ्ट से उनका उपयोग करने का तरीका जानने के लिए "केवल" था। - लेकिन ध्यान दें कि यह केवल ASCII वर्णों के लिए काम करता है। यह "विदेशी भाषाओं" जैसे अक्षरों को "ä", "è" या "ø" से नहीं पहचानता है। –

+0

और यह '+' और '-' को अंक –

4

उपयोग unicodeScalars के मूल्यों

let phrase = "The final score was 32-31!" 
var letterCounter = 0, digitCounter = 0 
for scalar in phrase.unicodeScalars { 
    let value = scalar.value 
    if (value >= 65 && value <= 90) || (value >= 97 && value <= 122) {++letterCounter} 
    if (value >= 48 && value <= 57) {++digitCounter} 
} 
println(letterCounter) 
println(digitCounter) 
संबंधित मुद्दे