[C] 每天來點字串用法 (4) - strchr、strrchr、strstr

就直接進入正題吧,今天要講的是: 字串搜尋strchr、strrchr:字串中搜尋字元所屬標頭檔:<string.h> 函式宣告: char *strchr( const char *str, int ch ); char *strrchr( const char *str, int ch ); 先傳入一個字串 str,再傳入一個字元 ch(雖然宣告裡它的型態是 int,但 char 本來就是用 ASCII 碼存的,所以傳入後會被當成整數來使用),如果有在 str 裡找到 ch,回傳第一個 ch 的所在位址;如果找不到,回傳 NULL。 而這兩個函式的差別在於:strchr() 是從前面...

[演算法] [C++ / Python] 當 DFS 遇上排列

深度優先搜尋(DFS)是樹或圖的一種走訪方式,而我們也可以將他應用在「排列」上。 剪刀、石頭、布!-全部排列現在有三個人:甲、乙、丙在猜拳,已知他們會出完全不同的拳,而你想知道依照甲、乙、丙的順序,他們出拳的排列有哪幾種的話,就可以用 DFS 來算喔! 蛤?用 DFS?這不是樹的走訪嗎?管他的,先上程式碼! C++string gesture[3] = {"剪刀", "石頭", "布"}; bool visited[3] = {false}; string arrangement[3]; void dfs(int layer){ if (layer == 3){ for (int i =...

[C/C++] 每天來點字串用法 (3) - const char* to char*

這次沒有拖到欸d(`・∀・)b(然而三年後拖到了) 今天帶來的不是函式,而是一個小技巧: 由 const char* 轉成 char*有時候可能在將字串傳入函式時,會出現以下錯誤: error: invalid conversion from 'const char*' to 'char*' note: expected 'char *' but argument is of type 'const char *' 這是因為 const char* 沒辦法自動轉換成 char*,那麼基本上是沒救了啦,不過有一些方法可以繞過編譯器檢查或達到與轉換型別相同的效果: 直接修改函式參數的型態定義...

[Python] 關於變數與參考的二三事

寫過 Python 的人大概都知道,在複製 list 的時候最好不要直接指定,而要使用 copy 函式,但可能有些時候,我們還是會不小心觸發這個黑魔法,所以今天我們要來破解這個魔咒,看看到底背後藏了什麼祕密! 變數首先我們要來看一下 Python 的變數到底是如何運作的,假設我們輸入了: x = 1 就代表我們把 x 的值指定為 1 了,是嗎?事實上並不是這樣的,而是讓 x 這個變數參考到了 1 這個物件,我們可以用 id() 函式來看看這個物件在記憶體中的位址究竟在哪: print(id(x)) # 94526375507712 我們可以看到,有一個奇怪的數字被印出來了。而如果我們將 ...

[C] 每天來點字串用法 (2) - strcpy、strncpy

結果隔了四天才更新 qwq,前幾天根本忘得一乾二淨 XD(同時適用於三年前及現在) 進入正文吧,今天要介紹的是: strcpy、strncpy:字串複製所屬標頭檔:<string.h> 函式宣告: char *strcpy( char *dest, const char *src ); char *strncpy( char *dest, const char *src, size_t count ); 先說 strcpy(),將來源字串(src)複製到目的地(dest),並回傳 dest 指向的字串,要注意的有以下兩點: 第一個參數是目的地(dest),第二個是來源(src) 會有緩衝...

[C] 每天來點字串用法 (1) - strlen

第一天就來個比較簡單又實用的函式好了,不然我怕我堅持不下去(誤)。 strlen:字串長度所屬標頭檔:<string.h> 函式宣告: size_t strlen( const char *str ); 傳入一個字串 str,回傳這個字串的長度,而 \0 不計入長度(但 \n 計入)。其中的回傳值型態 size_t 通常是無號整數型別。 以下這個程式示範了 strlen() 的用法: #include <stdio.h> int main(){ char s1[16], s2[16]; char *s3 = s2; char s4[] = "happy new year\n"; scan...

[C] 每天來點字串用法(基本篇)

有感於 C 的字元陣列實在有夠難(只是你廢),所以決定每天搞懂一點關於它的性質或用法之類的,希望我能夠持之以恆。(2018 的我) 不,你不行。(2021 的我) 字串的基本使用首先,C 的字串指的其實是字元陣列,而字元陣列的使用通常有以下幾種: char s1[128] = "hello world"; char s2[] = "hello world"; 另外,許多函式都會使用字元指標來操作字串: char *s3 = s1; // 相當於 char *s3 = &s1[0] 而對於字元指標的宣告,C 有一個特別的地方,他可以直接讓字元指標類的字串有初始值: char *s4 = "...

[Python 3.6] 初探 f-string

第一篇技術文章就決定是你了(笑) PEP 498: Formatted string literalsFormatted string literals,我暫時翻譯成格式化字串實字,是 Python 在 3.6 版加入的新特色,這個功能源自於 PEP 中的 498 號提案,而這個特色又被稱作 f-string,讓我們來看看要怎麼使用吧: name = 'Sky' print(f'My name is {name}.') # 'My name is Sky.' 有看到單引號前的 f 嗎?那是表示這個字串中會包含需要被取代的部分(F 也可以),然後讓我們看看字串中間的左大括號,這是取代欄位的...

[短談] 部落格文章搬移計劃

過了一個寒假,我的新部落格終於完成啦~ 接下來我會慢慢地把原本部落格(天上的東東w)上的文章搬過來這裡,主要的目標是一些技術性的文章或翻譯,一些日常閒聊的就看我心情了(笑)。 另外,我預計(又挖了一個坑)會有新的一兩篇文在寫這個部落格是怎麼建立的,主軸是如何使用 Lektor 來建立靜態網站,外加一些沒人想聽的心路歷程。 我原本以為 Lektor 應該不會太難,但還是有不少小地方需要注意。 不過今年可能會比以往還忙,所以還不知道會不會正常更新(藉口)。或許我可以在等 model train 好的過程中來寫個文章,不然每次都呆呆地盯著他跑也是很浪費時間。 好了,廢話講太多了,這次就這樣吧XD

Hello world 你好

這是個用來測試的文章。Markdown: SyntaxOverviewPhilosophyMarkdown is intended to be as easy-to-read and easy-to-write as is feasible. Readability, however, is emphasized above all else. A Markdown-formatted document should be publishable as-is, as plain text, without looking like it's been marked up with tag...