From d5933c459ba6625373a9a5c418146f94146878b4 Mon Sep 17 00:00:00 2001 From: AceVest Date: Wed, 1 Mar 2017 23:49:28 +0800 Subject: [PATCH] ... --- .gitignore | 1 + .../Basics.xcplaygroundpage/Contents.swift | 124 +++++++++++++++++- .../UserInterfaceState.xcuserstate | Bin 18967 -> 18964 bytes .../UserInterfaceState.xcuserstate | Bin 15044 -> 15257 bytes learn/cc/string.cc | 34 +++++ learn/doc/mac_bash_profile | 3 +- learn/doc/vimrc | 8 +- learn/python/dictionary.py | 15 ++- learn/python/list.py | 24 +++- learn/python/set.py | 6 + learn/python/utils.py | 15 ++- tools/comm/htc.c | 4 +- 12 files changed, 214 insertions(+), 20 deletions(-) create mode 100644 learn/cc/string.cc diff --git a/.gitignore b/.gitignore index 687f5a3..9d63951 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,5 @@ ish *.swp *.ef *.conf +*.diff dvwa diff --git a/learn/AcePlay/AcePlay.playground/Pages/Basics.xcplaygroundpage/Contents.swift b/learn/AcePlay/AcePlay.playground/Pages/Basics.xcplaygroundpage/Contents.swift index 1f82280..4890fa0 100644 --- a/learn/AcePlay/AcePlay.playground/Pages/Basics.xcplaygroundpage/Contents.swift +++ b/learn/AcePlay/AcePlay.playground/Pages/Basics.xcplaygroundpage/Contents.swift @@ -2,18 +2,134 @@ import UIKit -let str = "Hello, playground.小狗:🐶 锤子:🔨" +// String values can be constructed by passing an array of Character values +let catCharacters: [Character] = ["C", "a", "t", " ", "猫"] +let catString = String(catCharacters) +print(catString) + +// Character 加到String的方法 +var welcome = "Hello World" +let exclamationMark: Character = "!" +welcome.append(exclamationMark) +print(welcome) + +// ############# Type Alias ################ +typealias AudioSample = UInt + +let maxAmplitudeFound = AudioSample.max + + +// ############# Tuple ################ +let http404Error = (404, "Page Not Found") +let (httpRetCode, _) = http404Error +print("Http RetCode \(httpRetCode) Error Message \(http404Error.1)") + +let httpStatus = (statusCode: 200, description: "OK") +print("Http RetCode \(httpStatus.statusCode) Message \(httpStatus.description)") + + +// ############# Optionals ################ +let possibleNumber = "123" +let convertNumber : Int? = Int(possibleNumber) // of type Int? + +if convertNumber != nil { + print("ConvertNumber is \(convertNumber)") + print("ConvertNumber is \(convertNumber!)") +} else { + print("ConvertNumber is nil") +} + +// ############# Optionals Binding ################ +if let actualNumber = Int(possibleNumber) { + print("\"\(possibleNumber)\" has an integer of \(actualNumber)") +} else { + print("\"\(possibleNumber)\" could not to be converted to an integer") +} + +if let firstNumber = Int("4"), let secondNumber = Int("42"), firstNumber < secondNumber && secondNumber < 100 { + print("\(firstNumber) < \(secondNumber) < 100") +} + +// ############# Implicitly Unwrapped Optionals ################ +let possibleString: String? = "An Optional String" +let forcedString: String = possibleString! + +let assumedString: String! = "An Implicitly Unwrapped Optional String" +let implicitString: String = assumedString + +print("\(possibleString!) \(forcedString) \(assumedString) \(implicitString)") + +// ############# Nil-Coalescing Operator ################ +let defaultColorName = "yellow" +var userDefinedColorName: String? +// 等价于 userDefinedColorName == nil ? defaultColorName : userDefinedColorName +var colorNameToUse = userDefinedColorName ?? defaultColorName +print(colorNameToUse) + +userDefinedColorName = "red" +colorNameToUse = userDefinedColorName ?? defaultColorName +print(colorNameToUse) +// ############# Nil-Coalescing Operator ################ +for index in 1...5 { + print("Closed Range Operator \(index) of [1,5]") +} + +for index in 0..<5 { + print("Half-Open Range Operator \(index) of [0,5)") +} + +var word = "cafe" +print("the number of characters of \(word) is \(word.characters.count)"); +word += "\u{301}" +print("the number of characters of \(word) is \(word.characters.count)"); + + +let str = "Hello, playground.小狗:🐶 锤子:🔨" // Index -let strInx:String.Index = str.startIndex +var strInx:String.Index = str.startIndex str.index(after: strInx) -print(strInx) +print(str[strInx]) +for strInx in str.characters.indices { + print("\(str[strInx])", terminator: "") +} +print() +// utf8 编码格式 +for c in str.utf8 { + print(c, terminator: "-") +} +print() + +// unicode +for c in str.unicodeScalars { + print("\(c)\t\(c.value)") +} + +welcome.insert("~", at: welcome.endIndex) +print(welcome) +// contentsOf 是一个 Collection 所以要加 .characters +welcome.insert(contentsOf: " Hello Swift".characters, at: welcome.index(before: welcome.endIndex)) +print(welcome) + +welcome.remove(at: welcome.index(before: welcome.endIndex)) +print(welcome) + +let range = welcome.index(welcome.endIndex, offsetBy: -12).. = [ "Apple", "Google", "Facebook", "Tencent" ] print(company[0], company[1], company[2], company[3], separator: "#", terminator: " $$$$$\n") @@ -101,4 +217,4 @@ for value in DictD.values.sorted() { } let keys = [Int](DictD.keys) -print(keys) +print(keys) \ No newline at end of file diff --git a/learn/AcePlay/AcePlay.playground/playground.xcworkspace/xcuserdata/Ace.xcuserdatad/UserInterfaceState.xcuserstate b/learn/AcePlay/AcePlay.playground/playground.xcworkspace/xcuserdata/Ace.xcuserdatad/UserInterfaceState.xcuserstate index dde461ff1d914a43b20e7ded157907d50ca6841a..a208718ee0cd558cb5f6d0c14f210a5583fb4d80 100644 GIT binary patch literal 18964 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 UXL3Jkz%cGVd4l`z`(&H`51ODW8UO$Q literal 18967 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 yZ+CAGZ%(Xtkhj2F>>cNw~{KR%KSp0tv76Z=! diff --git a/learn/cc/string.cc b/learn/cc/string.cc new file mode 100644 index 0000000..293e22a --- /dev/null +++ b/learn/cc/string.cc @@ -0,0 +1,34 @@ +/* + * ------------------------------------------------------------------------ + * File Name: string.cc + * Author: Zhao Yanbai + * 2017-01-02 12:04:22 Monday CST + * Description: none + * ------------------------------------------------------------------------ + */ +#include +#include +using namespace std; + +int main(int argc, char *argv[]) { + + string s = "Hello World!!\n"; + decltype(s.size()) punct_cnt = 0; + + for(auto c : s) { + cout << c; + if(ispunct(c)) { + punct_cnt++; + } + } + + cout << punct_cnt << " punctuation characters in " << s; + + for(auto &c : s) { + c = toupper(c); + } + + cout << s; + + return 0; +} diff --git a/learn/doc/mac_bash_profile b/learn/doc/mac_bash_profile index 591b4fb..995e648 100644 --- a/learn/doc/mac_bash_profile +++ b/learn/doc/mac_bash_profile @@ -2,8 +2,8 @@ #HISTCONTROL=ignorespace # 命令前加空格避免记入历史 HISTCONTROL=ignoreboth -export PATH=/usr/local/sbin:$PATH #export PATH="$(brew --prefix homebrew/php/php56)/bin:$PATH" +export PATH=/usr/local/sbin:$PATH export PATH=/Users/Ace/.local/bin:$PATH export GOBIN=/Users/Ace/.local/bin export PATH=/Users/Ace/workspace/github/metasploit-framework:$PATH @@ -18,3 +18,4 @@ alias cls='clear' alias grep='grep --color' alias egrep='egrep --color' alias msf='msfconsole' +alias cdw='cd ~/workspace/' diff --git a/learn/doc/vimrc b/learn/doc/vimrc index 851a41e..cf110be 100644 --- a/learn/doc/vimrc +++ b/learn/doc/vimrc @@ -95,10 +95,10 @@ set nobomb " "为不同的文件类型设置不同的空格数替换TAB -"autocmd FileType php,python,c,java,perl,shell,bash,vim,ruby,cpp set ai -"autocmd FileType php,python,c,java,perl,shell,bash,vim,ruby,cpp set sw=4 -"autocmd FileType php,python,c,java,perl,shell,bash,vim,ruby,cpp set ts=4 -"autocmd FileType php,python,c,java,perl,shell,bash,vim,ruby,cpp set sts=4 +autocmd FileType php,python,h,c,java,perl,shell,bash,vim,ruby,cc,cpp set ai +autocmd FileType php,python,h,c,java,perl,shell,bash,vim,ruby,cc,cpp set sw=4 +autocmd FileType php,python,h,c,java,perl,shell,bash,vim,ruby,cc,cpp set ts=4 +autocmd FileType php,python,h,c,java,perl,shell,bash,vim,ruby,cc,cpp set sts=4 "golang默认使用TAB "autocmd FileType go set ai diff --git a/learn/python/dictionary.py b/learn/python/dictionary.py index 64259a7..68ff7cc 100755 --- a/learn/python/dictionary.py +++ b/learn/python/dictionary.py @@ -29,6 +29,9 @@ print D for name, value in D.items() : print "{0:10} : {1:10d}".format(name, value) +D = {x:x**2 for x in range(10)} +print(D) + D = dict(a=1, b=2, c=3) print D @@ -38,17 +41,21 @@ file_sz = {name : os.path.getsize(name) for name in os.listdir(".")} for item in file_sz.items() : print "{1}:\t{0}".format(item[0], item[1]) - - - x = dict() for i in range(0, 10) : x[i] = x.get(i, i) for i in sorted(x.keys()) : - print x[i] + print x[i], +print("") +# Another Make Empty Dictionary Method +x = { } +for i in range(0, 10) : + x[i] = x.get(i, i) +for i in sorted(x.keys()) : + print x[i], diff --git a/learn/python/list.py b/learn/python/list.py index 856c021..6354dd5 100755 --- a/learn/python/list.py +++ b/learn/python/list.py @@ -111,12 +111,34 @@ for k, v in reversed(zip(a, b)): for x in range(len(a)) : print x, +else : + print("") a += b print a +questions = ['name', 'quest', 'favorite color'] +answers = ['lancelot', 'the holy grail', 'blue'] +for q, a in zip(questions, answers): + print('What is your {0}? It is {1}.'.format(q, a)) + # 按下标循环 print L for i, v in enumerate(L) : - print i, v + print("[{0},{1}]".format(i, v)), +else : + print("") + + +# list 只适合快速后入后出,可以很方便地利用append 和 pop实现栈的功能 +# 要实现前出后入的队列功能就很慢,此时比较适合deque,用append 和 popleft实现 +from collections import deque + +queue = deque(['Apple', 'Microsoft', 'Google']) +queue.append('Tencent') +queue.append('Baidu') +queue.append('Alibaba') +queue.popleft() +print queue + diff --git a/learn/python/set.py b/learn/python/set.py index 43771fc..d5c7322 100755 --- a/learn/python/set.py +++ b/learn/python/set.py @@ -24,3 +24,9 @@ print "a&b: ", a&b print "a^b: ", a^b +Set = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'} +print(Set) + + +#Empty Set +EmptySet = set() # not { } diff --git a/learn/python/utils.py b/learn/python/utils.py index 9dd28ab..175e0d6 100755 --- a/learn/python/utils.py +++ b/learn/python/utils.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # -*- coding: utf-8 -*- # ------------------------------------------------------------------------ # File Name: utils.py @@ -16,6 +16,13 @@ print('OLDPWD:\t' + os.getenv('OLDPWD')) #判断一个对象是否可以迭代 -print isinstance('0xACE', collections.Iterable) -print isinstance([1, 2, 3, 4], collections.Iterable) -print isinstance(0xACE, collections.Iterable) +print(isinstance('0xACE', collections.Iterable)) +print(isinstance([1, 2, 3, 4], collections.Iterable)) +print(isinstance(0xACE, collections.Iterable)) + + +s = u'这是一个中文字符串' + +print('{!a}'.format(s)) # !a apply ascii() +print('{!s}'.format(s)) # !s apply str() +print('{!s}'.format(s)) # !r apply repr() diff --git a/tools/comm/htc.c b/tools/comm/htc.c index 7b4b549..b5be73b 100644 --- a/tools/comm/htc.c +++ b/tools/comm/htc.c @@ -20,9 +20,9 @@ #include int main() { - char ch; + unsigned int ch; while(scanf("%x",&ch) != EOF) - printf("%c",ch); + printf("%c",(unsigned char)ch); return 0; } -- 2.55.0