Time of Update: 2017-01-19
1 引子這篇筆記是根據StackOverflow上面的一個問題整理而成,主要內容是對C/C++當中四種類型轉換操作進行舉例說明。在之前其實對它們都是有所瞭解的,而隨著自己在進行總結,並敲了一些測試範例程式碼進行驗證之後,對它們的理解又深刻了一些。總所周知,在C++ 當中引入了四種新的類型轉換操作符:static_cast, dynamic_cast,
Time of Update: 2017-01-19
本篇筆記總結自一次代碼檢視。一般來說,使用C語言編程時我們都習慣在代碼當中使用C當中的宏定義來定義一個數值常量:#define MY_CONST 7在C++開發項目時,也會經常存在沿襲C當中常量用法情況。所以,如下的一種寫法看起來反倒覺得有些不正宗了:class MyClass { static const int my_const = 7; //
Time of Update: 2017-01-19
C語言atoi()函數:將字串轉換成int(整數)標頭檔:#include <stdlib.h>atoi() 函數用來將字串轉換成整數(int),其原型為:int atoi (const char * str);【函數說明】atoi() 函數會掃描參數 str 字串,跳過前面的空白字元(例如空格,tab縮排等,可以通過 isspace()
Time of Update: 2017-01-19
gcvt()函數:標頭檔:#include <stdlib.h>定義函數:char *gcvt(double number, size_t ndigits, char *buf);函數說明:gcvt()用來將參數number 轉換成ASCII 碼字串,參數ndigits 表示顯示的位元。gcvt()與ecvt()和fcvt()不同的地方在於,gcvt()所轉換後的字串包含小數點或正負符號。若轉換成功,轉換後的字串會放在參數buf
Time of Update: 2017-01-19
C語言strtol()函數:將字串轉換成long(長整型數)標頭檔:#include <stdlib.h>strtol() 函數用來將字串轉換為長整型數(long),其原型為:long int strtol (const char* str, char** endptr, int base);【參數說明】str 為要轉換的字串,endstr 為第一個不能轉換的字元的指標,base 為字串 str 所採用的進位。【函數說明】strtol() 會將參數 str 字串根據參數 base
Time of Update: 2017-01-19
C語言tolower()函數:將大寫字母轉換為小寫字母標頭檔:#include <ctype.h>定義函數:int toupper(int c);函數說明:若參數 c 為小寫字母則將該對應的大寫字母返回。傳回值:返迴轉換後的大寫字母,若不須轉換則將參數c 值返回。範例:將s 字串內的小寫字母轉換成大寫字母。#include <ctype.h>main(){ char s[] = "aBcDeFgH12345;!#$"; int i; printf("before
Time of Update: 2017-01-19
C語言index()函數:尋找字串並返回首次出現的位置相關函數:rindex, srechr, strrchr標頭檔:#include <string.h>定義函數:char * index(const char *s, int c);函數說明:index()用來找出參數s 字串中第一個出現的參數c 地址,然後將該字元出現的地址返回。字串結束字元(NULL)也視為字串一部分。傳回值:如果找到指定的字元則返回該字元所在地址,否則返回0.範例#include
Time of Update: 2017-01-19
C語言strcmp()函數:比較字串(區分大小寫)標頭檔:#include <string.h>strcmp() 用來比較字串(區分大小寫),其原型為: int strcmp(const char *s1, const char *s2);【參數】s1, s2 為需要比較的兩個字串。字串大小的比較是以ASCII 碼錶上的順序來決定,此順序亦為字元的值。strcmp()首先將s1 第一個字元值減去s2 第一個字元值,若差值為0 則再繼續比較下個字元,若差值不為0
Time of Update: 2017-01-19
C語言strchr()函數:尋找某字元在字串中首次出現的位置標頭檔:#include <string.h>strchr() 用來尋找某字元在字串中首次出現的位置,其原型為: char * strchr (const char *str, int c);【參數】str 為要尋找的字串,c 為要尋找的字元。strchr() 將會找出 str 字串中第一次出現的字元 c 的地址,然後將該地址返回。注意:字串 str 的結束標誌 NUL 也會被納入檢索範圍,所以 str
Time of Update: 2017-01-19
C語言strspn()函數:計算字串str中連續有幾個字元都屬於字串accept標頭檔:#include <string.h>strspn() 函數用來計算字串 str 中連續有幾個字元都屬於字串 accept,其原型為:size_t strspn(const char *str, const char * accept);【函數說明】strspn() 從參數 str 字串的開頭計算連續的字元,而這些字元都完全是 accept 所指字串中的字元。簡單的說,若 strspn()
Time of Update: 2017-01-19
C語言strcpy()函數:複製字串標頭檔:#include <string.h>定義函數:char *strcpy(char *dest, const char *src);函數說明:strcpy()會將參數src 字串拷貝至參數dest 所指的地址。傳回值:返回參數dest 的字串起始地址。附加說明:如果參數 dest 所指的記憶體空間不夠大,可能會造成緩衝溢出(buffer
Time of Update: 2017-01-19
C語言標準庫中的錯誤報表用法有三種形式。1、errnoerrno在<errno.h>標頭檔中定義,如下#ifndef errno extern int errno; #endif 外部變數errno儲存庫程式中實現定義的錯誤碼,通常被定義為errno.h中以E開頭的宏,所有錯誤碼都是正整數,如下例子# define EDOM 33 /* Math argument out of domain of function. */
Time of Update: 2017-01-19
最小產生樹Prim演算法樸素版 有幾點需要說明一下。1、2個for迴圈都是從2開始的,因為一般我們預設開始就把第一個節點加入產生樹,因此之後不需要再次尋找它。2、lowcost[i]記錄的是以節點i為終點的最小邊權值。初始化時因為預設把第一個節點加入產生樹,因此lowcost[i] = graph[1][i],即最小邊權值就是各節點到1號節點的邊權值。3、mst[i]記錄的是lowcost[i]對應的起點,這樣有起點,有終點,即可唯一確定一條邊了。初始化時mst[i] =
Time of Update: 2017-01-19
二叉樹結構常用的一些初始化代碼#include#includetypedef struct Node{ int data; Node *leftchild; Node *rightchild;}Node;/* 初始化一棵二叉樹排序樹。*/void InitBinaryTree(Node**root,int elem){ *root=(Node*)malloc(sizeof(Node)); if(!(*root)) { printf("Memory allocation for root
Time of Update: 2017-01-19
題目描述: 大家都知道資料結構裡面有一個結構叫做迴圈隊列。顧名思義,這是一個隊列,並且是迴圈的。但是現在,淘氣的囧哥給這個迴圈隊列加上了一些規矩,其中有5條指令: (1) Push K, 讓元素K進隊列。 (2) Pop,對頭元素出隊列。 (3) Query K,尋找隊列中第K個元素,注意K的合法性。 (4)
Time of Update: 2017-01-19
C語言中的char變數char是C/C++整型資料中比較古怪的一個,其它的如int/long/short等不指定signed/unsigned時都預設是signed。雖然char在標準中是unsigned(因為char類型提出的初衷是用來表示ascii碼,ascii碼的範圍是0~127),但實際情況中究竟是signed還是unsigned取決於編譯器。可通過下面程式判斷編譯器的預設char類型:void char_type(){ char c=0xFF; if(c==-1)
Time of Update: 2017-01-19
sscanf() - 從一個字串中讀進與指定格式相符的資料. 函數原型: Int sscanf( string str, string fmt, mixed var1, mixed var2 ... ); int scanf( const char *format [,argument]... ); 說明: sscanf與scanf類似,都是用於輸入的,只是後者以螢幕(stdin)為輸入源,前者以固定字串為輸入源。 其中的format可以是一個或多個 {%[*] [width] [{
Time of Update: 2017-01-19
貪心演算法所謂貪心演算法是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的僅是在某種意義上的局部最優解。貪心演算法不是對所有問題都能得到整體最優解,但對範圍相當廣泛的許多問題他能產生整體最優解或者是整體最優解的近似解。貪心演算法的基本思路如下:1.建立數學模型來描述問題。2.把求解的問題分成若干個子問題。3.對每一子問題求解,得到子問題的局部最優解。4.把子問題的解局部最優解合成原來解問題的一個解。 實現該演算法的過程:從問題的某一初始解
Time of Update: 2017-01-19
1、基本概念a、路徑和路徑長度若在一棵樹中存在著一個結點序列 k1,k2,……,kj, 使得 ki是ki+1 的雙親(1<=i<j),則稱此結點序列是從 k1 到 kj 的路徑。從 k1 到 kj
Time of Update: 2017-01-19
用遞迴法求N的階乘程式調用自身稱為遞迴( recursion).它通常把一個大型複雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解.遞迴的能力在於用有限的語句來定義對象的無限集合。一般來說,遞迴需要有邊界條件、遞迴前進段和遞迴返回段。當邊界條件不滿足時,遞迴前進;當邊界條件滿足時,遞迴返回。#include <stdio.h>#include <string.h>#include <stdlib.h>long factorial(int n){