• 描述:请你来实现一个atoi函数,使其能将字符串转换成整数 注意:1)函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止 2)如果寻找到的第一个非空字符为正/负号时,则将该符号与之后面尽...

    描述:请你来实现一个atoi函数,使其能将字符串转换成整数

    注意:1)函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止

                2)如果寻找到的第一个非空字符为正/负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正/负号

                3)如果寻找到的第一个字符是数字,则直接将其与之连续的数字字符组合起来,形成整数

                4)如果该字符串中的第一个非空字符不是一个有效整数字符、字符串为空、字符串仅包含空白字符,则不进行转换

                5)转换后的数值范围在 [−2^31,  2^31 − 1],超过这个范围,最大则显示 2^31-1,最小则显示-2^31

    例1:"42" -> 42

    例2:"-42" -> -42

    例3:"4193 with words" -> 4193

    例4:"words and 987" -> 0

    例5:"-91283472332" -> -2147483648

    例6:"3.14159" -> 3

    例7:"-" -> 0

    例8:"+1" -> 1

    例9:"-+1" -> 0

    例10:"+-1" -> 0

     

    思路:

    1)去掉首尾的空字符

    2)判断第一个非空字符是不是一个有效整数字符(0~9、+、-)

    3)循环遍历字符串,取出相连接的数字拼接

    4)判断最红的结果是否为空、只包含+/-号、是否在32位范围内

    5)得出最后结果

    具体实现:

    class Solution {
        func myAtoi(_ str : String)->Int{
            
            //判空处理
            if str.count == 0{
                return 0
            }
            var s = str
            //开头为空时替换空
            
            s = s.removeHeadAndTailSpace
            var first : Character!
            var result : String! = ""
            if s.count > 0 {
                first = s.first
                
                //判断字符串中的第一个非空字符是不是一个有效整数字符
                if first >= "0" && first <= "9" || first == "+" || first=="-" {
                    //把第一位放进去(只能是数字、正负号)
                    result = String(first)
                    s.removeFirst()
                    //循环只需要数字
                    for c in s {
                        if c >= "0" && c <= "9"{
                            result += String(c)
                        }else{
                            break
                        }
                    }
                }
            }
    
            //判断最终字符长是否为空或则只有一个正负号
            if result.count == 0 || result == "+" || result == "-" {
                return 0
            }        
            
            if (result! as NSString).integerValue > 2147483647 {
                return 2147483647
            }else if (result! as NSString).integerValue < -2147483648 {
                return -2147483648
            }
            return (result! as NSString).integerValue
        }
        
        func isPurnInt(s : Character) -> Bool{
            let scan = Scanner.init(string: String.init(s))
            var val : Float = 0
            return scan.scanFloat(&val)&&scan.isAtEnd
        }
        
    }
    
    
    extension String{
        /*
         *去掉首尾空格
         */
        var removeHeadAndTailSpace:String {
            let whitespace = NSCharacterSet.whitespaces
            return self.trimmingCharacters(in: whitespace)
        }
        
    }

     

    展开全文
  • 看书上说有个toInt()的函数,为啥最新的xcode报错,程序如下: var x:Int=1 var y:String="1" var z:Int=y.toInt()//此处报错
  • 字符串转换整型

    2017-08-19 10:44:30
    Swift中,字符串转换整型的方法有两种,我们在这里比较一下这两种方法的区别: 1、使用强制类型转换,代码如下:var str = "1234" var integer = Int(str) print(integer) // 输出1234 但如果换一个字符串 ...

    在Swift中,字符串转换为整型的方法有两种,我们在这里比较一下这两种方法的区别:


    1、使用强制类型转换,代码如下:

    var str = "1234"
    var integer = Int(str)
    print(integer)  // 输出1234

    但如果换一个字符串

    var str = "123,4"
    var integer = Int(str)
    print(integer)  // 输出nil

    2、先将swift原生String类型字符串转换为NSString类型,再使用NSString类型的只读属性即可完成转换

    var str = "1234"
    var integer = (str as NSString).integerValue
    print(integer)  // 输出1234
    现在换一个字符串

    var str = "123,4"
    var integer = (str as NSString).integerValue
    print(integer)  // 输出123
    但再换一个字符串

    var str = "a123,4"
    var integer = (str as NSString).integerValue
    print(integer)  // 输出0

    结论:可见第一种方法方便、简单,但如果字符串中含有非数字字符,便不能完成转换,也就是说,这种方法只能将字符串整个全部转换成整型,而且转换的结果为可选类型(成功时字面量为该数字,失败时为nil);第二种方法相比第一种方法略为麻烦一点,而且会有一点多余的转换的开销(官方文档说String转换为NSString时是零开销,但肯定是会有开销的,只是几乎能忽略不计),但这种方式可以从字符串的第一个字符开始判断,若第一个字符为非数字字符,则转换结果为0,若第一个字符为数字字符,则转换下一个字符,直到遇到非数字字符或字符串结尾为止,并且中这种方式转换的结果为非可选整型


    以博主个人的习惯来说,推荐大家使用第二种转换方法。

    展开全文
  • swift 4. 字符串

    2016-09-03 17:55:39
    字符串标签:swift2. 用前缀或后缀法比较字符串用hasPrefix和hasSuffix这2个字符串的对象方法,来判断和比较,他们返回boolean值的true或falsely看个例子://申明一个字符数组,后面会讲到 var string1 = [ "Act1:...

    swift 4. 字符串

    标签:swift


    2. 用前缀或后缀法比较字符串

    hasPrefixhasSuffix这2个字符串的对象方法,来判断和比较,他们返回boolean值的true或falsely

    看个例子:

    //申明一个字符数组,后面会讲到
    var string1 = [
        "Act1:1:Dojo",
        "Act1:2:Do",
        "Act1:3:Dojo",
        "Act1:4:Dojo"
    ]
    //申明2个整型变量,记住中间要用逗号啊。
    var j = 0,k = 0,d = 0
    
    for i in string1 {
        if i.hasPrefix("Act1") {
            j++
        }
        if i.hasSuffix("Do"){
            k++
        }
    
        if i.containsString("Do") {
            d++
        }
    }
    
    print("有Act前缀的数有\(j)个") //输出4
    print("有Do后缀的数有\(k)个") //输出1
    print("包含Do的数有\(d)个") //输出4

    3. 大小写转换

    大小写转换是一般的语言中都会有的函数方法,swift中用字符串对象的属性uppercaseStringlowercaseStringcapitalizedString来转换,记住是属性。不是函数,也不是方法:

    //大小写转换
    
    var string2 = "hi,my name is yangyi ,what`s your name?"
    
    var string3 = "hi,My Name IS Yangyi ,what`s your name?"
    
    var string4 = "hi,my name is yangyi ,what`s your name?"
    
    var string_upp = string2.uppercaseString
    
    var string_lower = string3.lowercaseString
    
    var first_upp = string4.capitalizedString
    
    print("全部大写\(string_upp)") 
    //全部大写HI,MY NAME IS YANGYI ,WHAT`S YOUR NAME?
    
    print("全部小写\(string_lower)") 
    //全部小写hi,my name is yangyi ,what`s your name?
    
    print("首字母大写\(first_upp)") 
    //首字母大写Hi,My Name Is Yangyi ,What`s Your Name?

    我顺便来复习下其他语言中是如何大小写转换的:

    //javascript
    var a = "hello";
    var b = "HellO";
    var a_upper = a.toUpperCase();  //大写
    var a_lower = a.toLowerCase();  //小写
    
    //php
    $a = "hello, word!";
    $a_upper = strtoupper($a); //转换成大写
    $b_lower = strtolower($b); //转换成小写
    $first_upper = ucfirst($b); //首字母大写
    

    4. 遍历一个字符串

    在swift2中遍历字符串得用字符串的一个 characters属性:

    var str = "Hello, Swift~"
    for c in str.characters {
        print(c, terminator: " ")
    }

    输出:

    H e l l o ,   S w i f t ~ 

    5. 获取字符串中的某个字符

    swift2中不能用str[0], str[1]等方式,得用index索引的方式,定位到位置:

    startIndex 标示字符串的0开始的一个索引

    var str = "Hello, Swift"
    let startIndex = str.startIndex  //0
    startIndex  //0
    str[startIndex] //H

    advancedBy 从索引位置开始取第几个值

    var str = "Hello, Swift"
    let startIndex = str.startIndex  //0
    startIndex  //0
    str[startIndex.advancedBy(1)] //e
    str[startIndex.advancedBy(7)] //S

    predecessor 取前一个 succesor 取后一个

    var str = "Hello, Swift"
    let startIndex = str.startIndex  //0
    let spaceIndex = startIndex.advancedBy(6) // " "定位到空格
    str[spaceIndex.predecessor()] // 空格前是","
    str[spaceIndex.successor()] // 空格后是"S"

    endIndex 最后一个字符索引。

    var str = "Hello, Swift"
    let endIndex = str.endIndex // 13 最后一位是13。
    str[endIndex.predecessor()] //但是13没有,只有12.所以得取前一个。

    所以,startIndex 和 endIndex是一个前闭后开 0..<13这样的结构。

    Range 去一个区间的字符

    str[startIndex..<spaceIndex] // Hello, 

    其它的一些字符串的函数用法:

    let range = startIndex..<spaceIndex.predecessor() // 生成一个range 0..<5
    str.replaceRange(range, with: "Hi") // 替换一个区间 Hi, Swift
    str.appendContentsOf("!!!") // 在尾部追加 "Hi, Swift!!!"
    str.insert("?", atIndex: str.endIndex) //在一个索引出,插入一个字符 Hi, Swift!!!?
    str.removeAtIndex( str.endIndex.predecessor() ) // 移除一个字符,在索引处。 // 返回 ?
    str.removeRange( str.endIndex.advancedBy(-2)..<str.endIndex ) //移除一个区间。Hi, Swift!
    展开全文
  • 实现 atoi,将字符串转为整数。 在找到第一个非空字符之前,需要移除掉字符串中的空格字符。如果第一个非空字符是正号或负号,选取该符号,并将其与后面尽可能多的连续的数字组合起来,这部分字符即为整数的值。...

    实现 atoi,将字符串转为整数。

    在找到第一个非空字符之前,需要移除掉字符串中的空格字符。如果第一个非空字符是正号或负号,选取该符号,并将其与后面尽可能多的连续的数字组合起来,这部分字符即为整数的值。如果第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。

    字符串可以在形成整数的字符后面包括多余的字符,这些字符可以被忽略,它们对于函数没有影响。

    当字符串中的第一个非空字符序列不是个有效的整数;或字符串为空;或字符串仅包含空白字符时,则不进行转换。

    若函数不能执行有效的转换,返回 0。

    说明:

    假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231,  231 − 1]。如果数值超过可表示的范围,则返回  INT_MAX (231 − 1) 或 INT_MIN (−231) 。

    示例 1:

    输入: "42"

    输出: 42

    示例 2:

    输入: "   -42"

    输出: -42

    解释: 第一个非空白字符为 '-', 它是一个负号。

         我们尽可能将负号与后面所有连续出现的数字组合起来,最后得到 -42 。

    示例 3:

    输入: "4193 with words"

    输出: 4193

    解释: 转换截止于数字 '3' ,因为它的下一个字符不为数字。

    示例 4:

    输入: "words and 987"

    输出: 0

    解释: 第一个非空字符是 'w', 但它不是数字或正、负号。

         因此无法执行有效的转换。

    示例 5:

    输入: "-91283472332"

    输出: -2147483648

    解释: 数字 "-91283472332" 超过 32 位有符号整数范围。

         因此返回 INT_MIN (−231) 。

     

    class Solution {
        func myAtoi(_ str: String) -> Int {
            if str.isEmpty {
                return 0
            }
            // 去掉空格
            let whitespace = NSCharacterSet.whitespacesAndNewlines
            let noWhitespaceStr = str.trimmingCharacters(in: whitespace)
            var result = 0
            // 正负值标识
            var sign = 1
            for (index, scalars) in noWhitespaceStr.unicodeScalars.enumerated() {
                if ((scalars.value >= 48 && scalars.value <= 57) || (scalars.value == 45 && index == 0)) {
                    //如果第一位是字符 - 则标识结果为负数
                    if scalars.value == 45 && index == 0 {
                        sign = -1
                        continue
                    }
                    
                    //判断依据:当前结果大于最大值除10 (214748364)
                    if result > Int32.max / 10 || (result == Int32.max / 10 && Int(String(scalars))! > 7) {
                        return sign == 1 ? Int(Int32.max) : Int(Int32.min)
                    }
                    
                    result = result * 10 + Int(String(scalars))!
                }else if scalars.value == 43 && index == 0 {
                    continue
                }else {
                    break
                }
    
            }
            return result * sign
        }
    }

     

    展开全文
  • 字符串 转 int 是 toint() 和 String(int)

    ==> String to int

      toint() 

    ==> int to String

      String(int)


     ==> string to Double

    string.doubleValue


    ==> Double to String
    let double = 10.0
    let string = NSString(format: "%f" , double)


    注:

    因为swift的字符串默认是string类型,如果使用doubleValue,要需先成NSString 

    你可以用 
    let  str = "10.0"
    let double = (str as NSString).doubleValue 

    或是 
    let double = str.bridgeToObjectiveC().doubleValue


    展开全文
  • 比如100,我们希望输出”one hundred”,或者更好的是输出中文的”一百”这貌似要写不少行代码,不过事实上你想多了! ;)Cocoa为你提供了一件利器来完成这些事:NumberFormatterlet f = NumberFormatter() ...
  • 字符串整型、浮点型数据之间的转换PAT 1054(求平均值)题解类型转换函数字符串转化为其他类型其他类型转化为字符串       最近遇到的一道题。其中用到了将字符串转化为float类型,在...
  • Swift3.0语言教程字符串转换为数字值
  • //NSString 类型 转为整型,浮点型, var test:NSString = "3.3" println("test\(test)") println("test\(test.integerValue)") println("test\(test.floatValue)") println("tes...
  • Swift目前最新的版本是3.1,在熟悉最新的Swift版本,进行实际项目开发的过程中,遇到关于数据类型转换的问题,尤其是字符串与其他数据类型的转换。下面给大家总结一下,在Swift3.0中将字符串转换为其他数据类型的...
  • strtoul (将字符串转换成无符号长整型数) 相关函数 atof,atoi,atol,strtod,strtol 表头文件 #include<stdlib.h> 定义函数 unsigned long strtoul(const char *nptr,char **endptr,int base); ...
  • 把参数 str 所指向的字符串根据给定的 base 转换为一个无符号长整数     参数: str -- 要转换为无符号长整数的字符串。 endptr -- 对类型为 char* 的对象的引用,其值由函数设置为 str 中数值后的下一...
  • 前提小知识:在Swift中,如果想要使用某一个类(cocoapods导入的三方库除外),是不用导头文件的,因为Swift新增了一个OC中没有的概念,叫“命名空间”。只要在同一个命名空间中的资源都是共享的,而且默认情况下,...
  • 字符串常量添加类型包裹,可以将字符串强制转换成指定的类型。 4. 通过String类,实例化一个字符串变量。 5. 判断在字符串的尾部,是否包含指定的字符串。 6. 判断在字符串的头部,是否包含指定的字符串。 7....
  • swift 字符串

    2015-08-27 19:18:22
    下面是一些swift字符串的一些用法, 包括 从字符串的创建, 字符串的增删改查基本操作,字符串比较, 字符串的各种判断, 再到获取某个字符串中的某个字符, 对字符串进行转码, 从控制台输入字符串 等等, 你想要的都在这...
1 2 3 4 5 ... 20
收藏数 1,623
精华内容 649
关键字:

swift 成字符串 整形转换