Time of Update: 2017-01-19
代碼很簡單,功能也很單一,這裡就不多廢話了,大家直接看代碼吧。#include <stdio.h>#include <string.h> int main(int argc,char**argv){ char *token = argv[1]; FILE *fp = fopen("./test.txt","a+"); char buf[1024]; char *p; int s=-1,len=strlen(token),line=0,pos=-1;
Time of Update: 2017-01-19
1.const和引用可以把引用綁定在常量上,稱之為,對常量的引用。不能對那個引用賦值。如:const int ci = 1024;const int &ri = ci;解讀:ri是對ci的引用。ri的const意思是視ci為變數。對於常量,只能使用“對常量的引用”這個引用方式 int &ri = ci;是錯誤的,因為ci不能賦值,但是可能會對ri賦值從而影響const限定。所以,他們(制定標準的人)創造了 對常量的引用 的
Time of Update: 2017-01-19
題目:一個台階總共有 n 級,如果一次可以跳 1 級,也可以跳 2 級。求總共有多少總跳法?分析:也是比較基礎的題目,通過遞迴可以方便的求解。用Fib(n)表示青蛙跳上n階台階的跳法數,青蛙一次性跳上n階台階的跳法數1(n階跳),設定Fib(0) = 1; 當n = 1 時, 只有一種跳法,即1階跳:Fib(1) = 1; 當n = 2 時,
Time of Update: 2017-01-19
題目一: 輸入一顆二元樹,從上往下按層列印樹的每個節點,同一層按照從左往右的順序列印。輸入範例: 8 / / 6 10/ / / /5 7 9 11輸出範例:複製代碼 代碼如下:8 6 10 5 7 9 11思路分析: 把一顆二叉樹抽象成三個節點:根節點、左節點、右節點。 先序遍曆即可得到按行輸出的效果。
Time of Update: 2017-01-19
在從 1 到 n 的正數中 1 出現的次數題目:輸入一個整數 n,求從 1 到 n 這 n 個整數的十進位表示中 1 出現的次數。例如輸入 12,從 1 到 12 這些整數中包含 1 的數字有 1, 10, 1 1 和 12, 1 一共出現了 5 次代碼實現(GCC編譯通過):#include "stdio.h"#include "stdlib.h" int count1(int n);int count2(int n); int main(void){ int x;
Time of Update: 2017-01-19
左旋轉字串題目:定義字串的左旋轉操作:把字串前面的若干個字元移動到字串的尾部。如把字串 abcdef 左旋轉 2 位得到字串 cdefab。請實現字串左旋轉的函數。要求時間對長度為 n 的字串操作的複雜度為 O(n),輔助記憶體為 O(1)。分析:網上看到解法很多種,就不詳細說明了。我採用的是數組不對稱的交換時間複雜度應該是O(n)。代碼實現(GCC編譯通過):#include "stdio.h"#include "stdlib.h" void
Time of Update: 2017-01-19
大概所有學習C語言的初學者,都被前輩說過,C語言是世界上接近最速的程式設計語言,當然這並不是吹牛,也並不是貶低其他語言,誠然非C語言能寫出高速度的代碼,但是C語言更容易寫出高速的程式(高速不代表高效),然而再好的工具,在外行人手中也只能是黯淡沒落。對於現代編譯器,現代CPU而言,我們要盡量迎合CPU的設計(比如架構和處理指示的方式等),雖然編譯器是為程式員服務,並且在盡它最大的能力來最佳化程式員寫出的代碼,但是畢竟它還沒有脫離電子的範疇,如果我們的代碼不能讓編譯器理解,編譯器無法幫我們最佳化代碼
Time of Update: 2017-01-19
C代碼:#include <stdio.h>int main(void){ printf("That is Right Style\n"); return
Time of Update: 2017-01-19
把二叉尋找樹轉變成排序的雙向鏈表例如:轉換成雙向鏈表4=6=8=10=12=14=16struct BSTreeNode{int m_nValue; // value of nodeBSTreeNode *m_pLeft; // left child of nodeBSTreeNode *m_pRight; // right child of node};首先闡述下二叉排序樹:它首先要是一棵二元樹,在這基礎上它或者是一棵空樹;或者是具有下列性質的二元樹:
Time of Update: 2017-01-19
由標題可知,這篇文章主要講如何用C語言實現一個C/S模式的程式。主要功能:時間回送。客戶機發出請求,伺服器回應時間,並返回伺服器時間,與客戶機進行同步。廢話不多說,下面直接貼出原始碼。代碼如下:#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <errno.h> #include <time.h>
Time of Update: 2017-01-19
代碼如下所示:複製代碼 代碼如下:/* * 冒泡排序 */void BubbleSort(int arr[], int n){ int temp; for (int i = 0; i < n - 1; i++) { for (int j = i + 1; j < n; j++) { if (arr[i] >
Time of Update: 2017-01-19
複製代碼 代碼如下:#include "stdafx.h"#include <iostream>using namespace std;int _tmain(int argc, _TCHAR* argv[]){ char s[] = "012345678", *p = s; cout << "s:"<<s<<endl; cout << "*p++ = " << *p++ << ",
Time of Update: 2017-01-19
今天用ftruncate截斷檔案, 但怎麼都不能達到預料的效果, 截斷後檔案中的內容比較雜, 而且檔案大小也保持原來的.添加 fflush() 和 rewind() 後OK.以下是測試代碼:複製代碼 代碼如下:#include <stdio.h>#include <sys/types.h>#include <unistd.h>int main(){ FILE *fp; char *file = "tmp"; int
Time of Update: 2017-01-19
fflush用於清空緩衝流,雖然一般感覺不到,但是預設printf是緩衝輸出的。 fflush(stdout),使stdout清空,就會立刻輸出所有在緩衝區的內容。 fflush(stdout)這個例子可能不太明顯,但對stdin很明顯。 如下語句: int a,c; scanf("%d",&a); c=getchar(); 輸入: 12(斷行符號) 那麼 a=12 ,c= '\n' 而: int a,c; scanf("%d",&a); fflush(stdin); c=getchar();
Time of Update: 2017-01-19
先看下面一個例子a.c :複製代碼 代碼如下:int main(int argc, char *argv[]){ fprintf(stdout, "normal\n"); fprintf(stderr, "bad\n"); return 0;}$ ./anormalbad$ ./a > tmp 2>&1$ cat tmpbadtmp我們看到, 重新導向到一個檔案後, bad 到了 normal 的前面.原因如下:複製代碼 代碼如下:"The
Time of Update: 2017-01-19
構造雙向鏈表,不足之處,還望指正! 複製代碼 代碼如下:// DoubleLinkedList.cpp : 定義控制台應用程式的進入點。//構造雙向鏈表,實現從控制台輸入,插入,刪除,求大小size等操作#include "stdafx.h"#include <iostream>using namespace std;//定義雙向鏈表的節點template<class T>struct NODE{ NODE<T>*
Time of Update: 2017-01-19
操作符的重載有一些規則: 1. 重載操作符必須具有一個類類型或枚舉類型運算元。這條規則強制重載操作符不能重新定義用於內建類型對象的操作符的含義。如:int operator+(int, int), 不可以 2. 為類設計重載操作符的時候,必須選擇是將操作符設定為類成員還是普通非成員函數。在某些情況下,程式沒有選擇,操作符必須是成員;在另外一些情況下,有些經驗可以指導我們做出決定。下面是一些指導:a.
Time of Update: 2017-01-19
Factory 方法模式不同於簡單原廠模式的地方在於Factory 方法模式把對象的建立過程放到裡子類裡。這樣工廠父物件和產品父物件一樣,可以是抽象類別或者介面,只定義相應的規範或操作,不涉及具體的建立或實現細節。其類圖如下:執行個體代碼為:#pragma once class IProduct { public: IProduct(void); virtual ~IProduct(void); }; #pragma once #include "iproduct.h" class
Time of Update: 2017-01-19
選擇排序選擇排序是一種簡單直觀的排序演算法,其核心思想是:遍曆數組,從未排序的序列中找到最小元素,將其放到已排序序列的末尾。時間複雜度:O(n^2)穩定性 :不穩定 /* * @brief selection sort */ void selection_sort(int a[], int n) { int i, j, min, tmp; for (i = 0; i < n - 1; ++i) { min = i; for (j = i+1; j <
Time of Update: 2017-01-19
無論是模組化設計,還是物件導向設計,還是分層設計,實現子系統內部資訊的對外隱藏都是最關鍵的內在要求。以本人淺顯的經驗,把資訊隱藏按照程度的不同分成(1)不可見不可用(2)可見不可用(3)可見可用。1 不可見不可用就是說模組內部的變數、結構體、類定義對外部而已完全隱藏,外部對此一無所知。常用的實現方法就是利用不透明指標,請參見我的博文C語言開發函數庫時利用不透明指標對外隱藏結構體細節。這種方法同樣適用於C++語言,一種可能的實現方式為面向介面編程。標頭檔 IMyClass.hclass