2018-12-09 14:10:00 weixin_30701575 阅读数 90

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/ 
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/10091038.html 
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。
它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。
请注意,ASCII是American Standard Code for Information Interchange缩写,而不是ASCⅡ(罗马数字2),有很多人在这个地方产生误解。
在Swift中实现:字符串根据索引获取指定字符,
依据ASCII编码,实现字符和整数的相互转换。
首先扩展相应类的方法:
 1 //String扩展
 2 extension String {        
 3     //subscript函数可以检索数组中的值
 4     //直接按照索引方式截取指定索引的字符
 5     subscript (_ i: Int) -> Character {
 6         //读取字符
 7         get {return self[index(startIndex, offsetBy: i)]}
 8         
 9         //修改字符
10         set
11         {
12             //转换为字符数组
13             var arr:[Character] = Array(self)
14             arr[i] = newValue
15             self = String(arr)
16         }
17     }
18     
19     //String转ASCII整数值(定义小写为整数值)
20     public var ascii: Int {
21         return Int(unicodeScalars.first?.value ?? 0)
22     }
23 }
24 
25 //Character扩展 
26 extension Character  
27 {  
28   //Character转ASCII整数值(定义小写为整数值)
29    var ascii: Int {
30        get {
31            return Int(self.unicodeScalars.first?.value ?? 0)
32        }       
33     }
34 
35     //判断是否为数字
36     func isDigit() -> Bool
37     {
38         if self.ascii > 47 && self.ascii < 58
39         {
40             return true            
41         }
42         return false
43     }
44     
45     //判断是否为大写字母
46     func isUppercased() -> Bool
47     {
48         if self.ascii > 64 && self.ascii < 91
49         {
50             return true            
51         }
52         return false
53     }
54     
55     //判断是否为小写字母
56     func isLowercased() -> Bool
57     {
58         if self.ascii > 96 && self.ascii < 123
59         {
60             return true            
61         }
62         return false
63     }
64     
65     //判断是否为字母
66     func isLetter()-> Bool
67     {
68         if (self.ascii > 64 && self.ascii < 91) || (self.ascii > 96 && self.ascii < 123)
69         {
70             return true            
71         }
72         return false
73     }
74 }
75 
76 //Int扩展
77 extension Int
78 {
79     //Int转Character,ASCII值(定义大写为字符值)
80     var ASCII:Character 
81     {
82         get {return Character(UnicodeScalar(self)!)}
83     }
84 }

调用扩展方法,实现功能。示例:

 1 //字符串
 2 var str:String = "S"
 3 //String转ASCII整数值(定义小写为整数值)
 4 print(str.ascii)
 5 //Print:83
 6 
 7 //字符串
 8 str = "Strengthen"
 9 //根据索引获取字符
10 let char:Character = str[0]
11 //字符串修改
12 str[1] = Character("Q")
13 print(str)
14 //Print: SQrengthen
15 
16 //Character转ASCII整数值(定义小写为整数值)
17 let num:Int = char.ascii
18 print("\(char) ", terminator: "")
19 print("\(num) ", terminator: "")
20 //Print: S 83  
21      
22 //表示整数的字符串
23 let strNum:String = "88"
24 //先转换为整数,在根据ASCII表转换为对应字符
25 let charNum:Character = Int(strNum)!.ASCII
26 print("\(charNum) ", terminator: "")
27 //Print: X

 

转载于:https://www.cnblogs.com/strengthen/p/10091038.html

2016-07-29 16:27:44 MikoGodZd 阅读数 1616

swift号称吸取了c c++等一众语言精华,我信了,今天发现连基本的字符转int都无法完成=-=坑爹啊好吧废话不多说上代码:

static func stringToAscii(c:Character) ->Int{
        var numberFromC=0
        //使用for-in循环遍历转化成String的“B”
        for scalar in String(c).unicodeScalars
        {
            //字符串只有一个字符,这个循环只会执行1次
            numberFromC = Int(scalar.value)
        }
        return numberFromC
    }
2016-10-29 13:56:00 weixin_33889245 阅读数 0

我们在C++里处理字符通常是这样的

char a = 'A' // A = 65
printf("'%c' = %d", a + 1, a + 1) // 'B' = 66

这在号称吸收C/C++所有优势特性的Swift里面是行不通的,因为
Character 和 Int 不能进行计算操作,会报错

var c:Character = "A"
c + 1 // 这里是错误的

Xcode 会告诉你 Binary operator '+' cannot be applied to operands of type 'Character' and 'Int'

于是乎教科书里没有说的内容就带来了问题

网上也没有

但是教科书里说到一个例子中有String.unicodeScalars可以返回字符串的ASCII(或者是Unicode值)的数组。

于是

UnicodeScalar

这个类就被找到了

字符”A”可以这么表示

let A = Character(UnicodeScalar(65))

它的值65可以这么来

let A_ASCII = UnicodeScalar("A") // 65
2017-10-13 19:12:35 qq_39802178 阅读数 4262


(1)将字符转为整数值

var a:Character = "A"

var str = String(a)

var number:UInt32 = 0

for code in str.unicodeScalars {

    number = code.value;

}

print(number)


(2)将整数转换为字符

var num = 97

var ch:Character = Character(UnicodeScalar(num)!)

print(ch)

2016-07-30 22:41:09 chendehao001 阅读数 1577

字符

  • 对比 OC 与 Swift 中字符的区别
char charValue = 'a';//OC当中的字符:
var charValue1:Character = "a" //swift当中的字符:
  • Swift和OC字符不一样
    • 1.Swift是用双引号
    • 2.Swift中的字符类型和OC中的也不一样
      • OC中的字符占一个字节,因为它只包含ASCII表中的字符
      • Swift中的字符除了可以存储ASCII表中的字符还可以存储unicode字符.
      • OC的字符是遵守ASCII标准的,
      • Swift的字符是遵守unicode标准, 所以可以存放世界上所有国家语言的字符(大部分)
char charValue = '豪'; //OC当中:错误
var charValue2:Character = "豪" //swift当中: 正确
  • 注意: 双引号中只能放一个字符, 如下是错误写法
var charValue3:Character = "ab" // 直接报错

字符串

  • C OC Swift三种语法的对比较
//C: 
char *stringValue = "ab";
char stringArr = "ab";
//OC:
NSString *stringValue = "ab";
//Swift
var stringValue1 = "ab"
  • C语言中的字符串是以\0结尾的, 例如:
char *stringValue = "abc\0bcd";
printf("%s", stringValue);
//输出结果: abc
  • OC语言中的字符串也是以\0结尾的, 例如:
NSString *stringValue = @"abc\0bcd";
NSLog(@"%@", stringValue);
  • swift当中的字符串和C语言/OC语言中的字符串是不一样的
var stringValue = "abc\0bcd"
print(stringValue)
//输入结果: abcbcd
字符串常用方法
  • 计算字符串长度:
//C:
char *stringValue = "CD豪";
printf("%tu", strlen(stringValue));
//输出结果:5
//OC:
NSString *stringValue = @"CD豪";
NSLog(@"%tu", stringValue.length);
//输出结果:3    以UTF16计算
//swift:
var stringValue1 = "CD豪"
print(stringValue1.lengthOfBytesUsingEncoding(NSUTF8StringEncoding))
//输出结果:5  和C语言一样计算字节数
  • 字符串拼接
//C:
char str1[] = "abc";
char *str2 = "bcd";
char *str = strcat(str1, str2);
printf("%s",str);
//输出结果: abcbcd
//OC:
NSMutableString *str1 = [NSMutableString stringWithString:@"abc"];
NSString *str2 = @"bcd";
[str1 appendString:str2];
NSLog(@"%@", str1);
//输出结果: abcbcd
//swift:
var str1 = "chen";
var str2 = "dehao";
var str = str1 + str2;
print(str)
//输出结果:chendehao
  • 格式化字符串
//OC:
NSString *str =
[NSMutableString
stringWithFormat:@"http://blog.csdn.net/chendehao001/pic/%tu.png", @10];
NSLog(@"%@", str);
//输入结果: http://blog.csdn.net/chendehao001/pic/10.png
//swift:
var index = 10
var str3 = "http://blog.csdn.net/chendehao001/pic/\(index).png"
print(str3)
//输入结果: http://blog.csdn.net/chendehao001/pic/10.png
  • 字符串比较:
//oc:
NSString *str1 = @"abc";
NSString *str2 = @"abc";
if ([str1 compare:str2] == NSOrderedSame){
    NSLog(@"相等");
}else{
    NSLog(@"不相等");
}
//输出结果:相等
// oc
NSString *str1 = @"abc";
NSString *str2 = @"abc";
if ([str1 isEqualToString:str2]){
    NSLog(@"相等");
}else{
    NSLog(@"不相等");
}
//输出结果:相等
//Swift:(== / != / >= / <=), 和C语言的strcmp一样是逐个比较
var str4 = "abc";
var str5 = "abc";
if str4 == str5{
    print("相等");
}else{
    print("不相等");
}
//输出结果:相等
var str6 = "abd";
var str7 = "abc";
if str6 >= str7{
    print("大于等于");
}else{
    print("不大于等于");
}
//输出结果: 大于等于
  • 判断前后缀
//OC:
NSString *str = @"http://blog.csdn.net/chendehao001";
if ([str hasPrefix:@"http"]) {
    NSLog(@"是url");
}
if ([str hasSuffix:@"chendehao001"]) {
    NSLog(@"是顶级域名");
}
//输出结果: 
//是url
//是顶级域名
//Swift:
var str8 = "http://blog.csdn.net/chendehao001"
if str8.hasPrefix("http") {
    print("是url");
}
if str8.hasSuffix("chendehao001") {
print("是顶级域名");
}
//输出结果: 
//是url
//是顶级域名
  • 大小写转换
//OC:
NSString *str = @"abc.txt";
NSLog(@"%@", [str uppercaseString]);
NSLog(@"%@", [str lowercaseString]);
//输出结果: ABC.TXT
//abc.txt
//Swift:
var str9 = "abc.txt";
print(str9.uppercaseString)
print(str9.lowercaseString)
//输出结果: ABC.TXT
//abc.txt
  • 转换为基本数据类型
//OC:
NSString *str = @"250";
NSInteger number = [str integerValue];
NSLog(@"%tu", number);
//输出结果: 250
// swift
//如果str不能转换为整数, 那么可选类型返回nil
var str10 = "250"
//str10 = "250sb" 不能转换所以可能为nil
var number:Int? = Int(str10)
if number != nil{
    //以前的版本println会自动拆包, 现在的不会
    print(number!)
}