日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

stringcstdlibctimecstdargctimectypecmathclimits

發布時間:2023/12/4 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 stringcstdlibctimecstdargctimectypecmathclimits 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載地址:http://blog.csdn.net/kz_ang/article/details/7767335

<string>頭文件

string構造函數

string s  生成一個空字符串s
string s(str)  拷貝構造函數,生成str對象的復制品
string s(str,stridx)  將字符串str對象內"始于位置stridx"的部分當作字符串的初值
string s(str,stridx,strlen)  將字符串str對象始于stridx且最長為strlen部分作為字符串的初值
string s(cstr)  將C字符串作為s的初值
string s(chars,chars_len)  將C字符串前chars_len個字符作為字符串s的初值
string s(num,c)  生成一個字符串,包含num個c字符
string s(beg,end)  以區間(迭代器iterator )beg到end(不包含end)內的字符作為字符串s的初值

string析構函數

s.~string()  銷毀所有字符,釋放內存

賦值操作

重載=操作符

basic_string& operator=(const basic_string& rhs)
basic_string& operator=(const E *s)
basic_string& operator=(E c)

string對象= string對象 /?字符串("gaint") /?字符( ' j ')

assign()函數

s.assign(str)  把str對象賦給s對象
s.assign(str,pos,n)  把string 對象中從(下標)pos的后n個元素賦值給s
s.assign(str,pos,string::npos)  把字符串str從索引值p開始到結尾賦給s
s.assign(char_string)  把字符串賦值給s對象
s.assign(char_string,num)  把字符串前num個字符'賦給s對象
s.assign(first,last)  把(迭代器iterator )first和last之間的部分賦給字符串
s.assign(num,char_x)  把num個字符賦給s對象

交字符對象內容

void swap(basic_string& str)  把s與str對象的內容交換

尾部添加字符

重載+=?操作符

basic_string& operator+=(const basic_string& rhs)
basic_string& operator+=(const E *s)
basic_string& operator+=(E c)

string對象+= string對象 /?字符串("gaint") /?字符( ' j ')

append()函數

s.append(str)  把str對象t添加到s對象末尾
s.append(str,pos,num)  把string對象中從(下標)pos的后num個元素添加到s對象末尾
s.append(char_string)  把字符串添加到s對象末尾
s.append(char_string.num)  把字符串的前num個字符添加到s對象末尾
s.append(first,last)  把(迭代器iterator )first到last中的元素添加到s末尾
s.append(num,char_x)  把num個字符添加到s對象末尾

push_back()函數

s.push_back(char_x)  把單個字符添加到s的尾部,這個函數只能增加單個字符

插入字符

insert()函數

basic_string& insert(size_type p0,const basic_string& str)
basic_string& insert(size_type p0,const basic_string& str, size_type pos, size_type n)
basic_string& insert(size_type p0,const E *s, size_type n)
basic_string& insert(size_type p0, const E *s)
basic_string& insert(size_type p0, size_type n, E c)
iterator insert(iterator it, E c)
void insert(iterator it, size_type n, E c)
void insert(iterator it,const_iterator first, const_iterator last)

刪除字符?erase() 函數

basic_string& erase(size_type p0 = 0, size_type n = npos)
iterator erase(iterator it)
iterator erase(iterator first, iterator last)

轉換為字符串數組

const E *c_str() const  將內容以C_string返回,一個以'\0'結尾的字符數組

替換字符

s.replace(pos ,num , str )  用str代替s中從pos開始的num個字符
s.replace(pos ,num , chars)  用字符串代替s中從pos開始的num個字符
s.replace(pos1,num1,str,pos2, num2)  用str中從pos2開始的num2個字符,代替s中從pos1開始的 num1個字符
s.replace(pos1,num1,chars, num2 )  用字符串中num2個字符,代替s中從pos1開始的num1個字符
s. replace(pos,num,count,char)  用count個字符,代替s中從 pos開始的num個字符
s.replace(First,Last,str )  用 string 代替s中從(迭代器iterator)First到Last的字符
s.replace(First,Last,chars)  用字符串代替s中從(迭代器iterator)First到Last的字符
s.replace(First0,Last0,chars, num )  用字符串的num個字符,代替s中從(迭代器iterator )First到Last的字符
s.replace(First0,Last0,First,Last )  用(迭代器iterator)First開始到Last的字符,代替s中從(迭代器iterator )First0到Last0的字符
s.replace(First,Last,count,char)  用count個字符,代替s中從(迭代器iterator )First到Last的字符

比較字符串

==
!=
<
<=
>
>=

支持string與c_string的比較(如 str<"hello"),字典排序靠前的字符小,比較的順序是從前向后比較,遇到不相等的字符就按這個位置上的兩個字符的比較結果確定兩個字符串的大小。同時,string ("aaaa") <string(aaaaa),compare()他支持多參數處理,支持用索引值和長度定位子串來進行比較。他返回一個整數來表示比較結果,返回值意義如下:0表相等 大于0表大于 小于0表小于

int compare(const basic_string& str) const;
int compare(size_type p0, size_type n0,const basic_string& str
int compare(size_type p0, size_type n0,const basic_string& str, size_type pos, size_type n)
int compare(size_type p0, size_type n0,const E *s) const
int compare(const E *s) const
int compare(size_type p0, size_type n0,const E *s, size_type pos) const

字符串長度

size_type size() const
size_type length() const

返回字符數量,他們等效

字符串最大個數

size_type max_size() const  返回字符串的可能最大個數,C++字符串最多能包含的字符數,很可能和機器本身的限制或者字符串所在位置連續內存的大小有關系

字符串是否為空

booempty() const  判斷字符串是否為空

重新指定字符數組長度

void resize(size_type n, E t = E())  重新指定字符數組長度的長度為n,元素值為t

新分配之前字符容量

size_type capacity() const  返回重新分配之前的字符容量

保留一定量內存以容納一定數量的字符

void reserve(size_type n = 0)  保留一定量內存以容納一定數量的字符,這個函數為string重新分配內存,重新分配的大小由其參數決定,默認參數為0,這時候會對string進行非強制性縮減

存取單一字符

const_reference at(size_type pos) const
reference at(size_type pos)
const_reference operator[](size_type pos) const
reference operator[](size_type pos)

從stream讀取某值

>>
getline()

從stream讀取某值

將謀值寫入stream

<<  將謀值寫入stream

復制string

size_type copy(E *s,size_type n, size_type pos = 0) const  將某值賦值為一個C_string,把字符串的內容復制或寫入既有的c_string或字符數組內

返回字符數組形式

const E *data() const  將內容以字符數組形式返回,但并不添加’\0’

返回某個子字符串

basic_string substr(size_type pos = 0, size_type n = npos) const

搜索與查找

這些函數返回符合搜索條件的字符區間內的第一個字符的索引,沒找到目標就返回npos.所有的函數的參數說明如下:第一個參數是被搜尋的對象.第二個參數(可有可無)指出string內的搜尋起點索引,第三個參數(可有可無)指出搜尋的字符個數

size_type find(const basic_string& str,size_type pos = 0) const
size_type find(const E *s, size_type pos, size_type n) const
size_type find(const E *s, size_type pos = 0) const
size_type find(E c, size_type pos = 0) const
size_type find(E c, size_type pos = 0) const
size_type rfind(const basic_string& str,size_type pos = npos) const
size_type rfind(const E *s, size_type pos,size_type n = npos) const
size_type rfind(const E *s, size_type pos = npos) const
size_type rfind(E c, size_type pos = npos) const
size_type find_first_of(const basic_string& str,size_type pos = 0) const
size_type find_first_of(const E *s, size_type pos,size_type n) const
size_type find_first_of(const E *s, size_type pos = 0) const
size_type find_first_of(E c, size_type pos = 0) const
size_type find_last_of(const basic_string& str,size_type pos = npos) const
size_type find_last_of(const E *s, size_type pos,size_type n = npos) const
size_type find_last_of(const E *s, size_type pos = npos) const
size_type find_last_of(E c, size_type pos = npos) const
size_type find_first_not_of(const basic_string& str,size_type pos = 0) const
size_type find_first_not_of(const E *s, size_type pos,size_type n) const
size_type find_first_not_of(const E *s, size_type pos = 0) const
size_type find_first_not_of(E c, size_type pos = 0) const
size_type find_last_not_of(const basic_string& str,size_type pos = npos) const
size_type find_last_not_of(const E *s, size_type pos,size_type n) const
size_type find_last_not_of(E c, size_type pos = npos) const
size_type find_last_not_of(const E *s,size_type pos = npos) const

迭代器

正向迭代器

    • iterator begin()
    • const_iterator begin() const
    • iterator end()
    • const_iterator end() const

返回配置器

    • A get_allocator() const

逆向迭代器

    • reverse_iterator rbegin()
    • const_reverse_iterator rbegin() const
    • reverse_iterator rend()
    • const_reverse_iterator rend() const

npos

string::npos  string::npos的類型是string::size_type,所以,一旦需要把一個索引與npos相比,這個索引值必須是string::size_type類型的.是類的靜態成員,更多的情況下,我們可以直接把函數和npos進行比較(如:if(s.find("jia")== string::npos))

?


注意

  • C++字符串并不以’\0’結尾。我的建議是在程序中能使用C++字符串就使用,除非萬不得已不選用c_string
  • 還有必要再重復一下C++字符串和C字符串轉換的問題,許多人會遇到這樣的問題,自己做的程序要調用別人的函數、類什么的(比如數據庫連接函數Connect(char*,char*)),但別人的函數參 數用的是char*形式的,而我們知道,c_str()、data()返回的字符數組由該字符串擁有,所以是一種const char*,要想作為上面提及的函數的參數,還必須拷貝到一個char*,而我們的原則是能不使用C字符串就不使用。那么,這時候我們的處理方式是:如果 此函數對參數(也就是char*)的內容不修改的話,我們可以這樣Connect((char*)UserID.c_str(), (char*)PassWD.c_str()),但是這時候是存在危險的,因為這樣轉換后的字符串其實是可以修改的(有興趣地可以自己試一試),所以我強調除非函數調用的時候不對參數進行修改,否則必須拷貝到一個char*上去。當然,更穩妥的辦法是無論什么情況都拷貝到一個char*上去。同時我們也祈 禱現在仍然使用C字符串進行編程的高手們寫的函數都比較規范,那樣 我們就不必進行強制轉換了
  • 我們可以使用下標操作符[]和函數at()對元素包含的字符進行訪問。但是應該注意的是操作符[]并不檢查索引是否有效(有效索引0~str.length()),如果索引失效,會引起未定義的行為。而at()會檢查,如果使用 at()的時候索引無效,會拋出out_of_range異常

<cstdlib>頭文件

字符串轉整形

  • 形式: char *_itoa( int value, char *string, int radix );
  • 參數:
    • value?表示需要被轉換的整形值
    • string?表示轉換后字符串被存放的地址
    • radix?表示被轉換成幾進制

字符串轉成 double 型

  • 形式: double atof( const char *string );
  • 參數:?string?表示需要被轉換的字符串

字符串轉成 int 型

  • 形式: int atoi( const char *string );
  • 參數:?string?表示需要被轉換的字符串

字符串轉成 long 型

  • 形式: long atol( const char *string );
  • 參數:?string?表示需要被轉換的字符串

malloc函數

  • 形式: void *malloc( size_t size );
  • 參數:?size?為新開辟時候需要的內存區大小
  • 注意:
    • malloc 返回值是 void 所以必須有強制轉換類型 (typename*)malloc
    • LEN 為開辟空間的長度,如果為單個變量可用sizeof(typename) 函數返回一個 typename 類型變量內存空間需要的長度.如果是數組的話其中元素個數為 N 其內存空間需要的長度為 N*sizeof(typename) [cpp]?view plaincopy print?
    • int?*p=(int*)malloc(sizeof(int));//p為新開辟的整形變量的指針??
    • 由于 point_name 為地址,malloc 動態生成的結構體無名稱,不能用?*point_name.?成員名?來訪問成員,但由于 () 優先級高,所以可以用?(*point_name).成員名?來訪問
    • malloc 不會初始化開辟空間里面的內容,所以用 malloc 開辟空間的元素在沒有初始化前使用結果是未知的
  • 作用: 為變量開辟存儲空間

free函數

  • 形式: void free( void *memblock );
  • 參數:?memblock?用 malloc 或者 realloc 開辟空間的指針
  • 注意:
    • 用 malloc 生成的變量/結構體/數組用 free 函數來釋放內存
    • free 釋放的都是malloc指針指向的內存,而不會刪掉指針本身
    • 對空指針應用 free 是安全的
    • 不能用 sizeof 操作符來確定動態分配數組包含的字節數
  • 作用: 釋放由 malloc,realloc 或者 calloc 開辟的變量空間

realloc函數

  • 形式:?void *realloc( void *memblock, size_t size );
  • 參數:
    • memblock?為原來有 malloc 開辟空間的指針
    • size?為新開辟時候需要的新的內存區大小,要比 malloc 的大才行
  • 注意:
    • realloc 返回值是 void 所以必須有強制轉換類型 (*typename)realloc
    • LEN 為開辟空間的長度,如果為單個變量可用 sizeof(typename) 函數返回一個 typename 類型變量內存空間需要的長度.如果是數組的話其中元素個數為N其內存空間需要的長度為 N*sizeof(typename)
#include<iostream> #include <cstdlib> using namespace std; void main() { int *p=(int*)malloc(sizeof(int)); *p = 5; cout<<"用 malloc 開辟變量空間 :"<<endl; cout<<"指針 p 指向的地址"<<p<<endl; cout<<"指針 p 指向的地址里面的變量值"<<*p<<endl; p =(int*) realloc((void*)p,2*sizeof(int)); *(p+1) = 6; cout<<"用 realloc 重新開辟變量空間 :"<<endl; cout<<"指針 p 指向的地址"<<p<<endl; cout<<"指針 p 指向的地址里面的變量值"<<*p<<endl; cout<<"指針 p+1 指向的地址"<<(p+1)<<endl; cout<<"指針 p+1 指向的地址里面的變量值"<<*(p+1)<<endl; system("pause"); } 輸出結果:

用 malloc 開辟變量空間 : 指針 p 指向的地址003B5410 指針 p 指向的地址里面的變量值5 用 realloc 重新開辟變量空間 : 指針 p 指向的地址003B5410 指針 p 指向的地址里面的變量值5 指針 p+1 指向的地址003B5414 指針 p+1 指向的地址里面的變量值6 請按任意鍵繼續. . .

    • 由于 point_name 為地址,realloc 動態生成的結構體無名稱,不能用?*point_name.成員名?來訪問成員,但由于 () 優先級高,所以可以用?(*point_name).成員名?來訪問
    • realloc 先按照 size 分配空間在將原有的數據從頭到位拷貝到新分配的區域,然后釋放原來的 memblock 指向的內存區域
  • 作用: 為變量開辟存儲空間

calloc函數

  • 形式: void *calloc( size_t num, size_t size );
  • 參數:
    • num?是要開辟此類變量的個數
    • size?是要開辟此類型變量一個需要的空間
  • 注意: 并返回指向所分配區域的第一個字節的指針若內存不夠則返回 NULL. 該空間的內容全部初始化大小為 0?

隨機生成數函數

  • 形式: int rand( void );
  • 返回值: 返回值為 0 至 RAND_MAX 之間的隨機數值,RAND_MAX 定義在stdlib.h,其值為2147483647。
  • 注意:
    • 在調用此函數產生隨機數前,必須先利用srand()設好隨機數種子,如果未設隨機數種子,rand()在調用時會自動設隨機數種子為1
    • 但是這個只是產生偽隨機數,若無明確給出隨機數索引種子,每次得到的隨機數都一樣,可調用srand來初始化rand的隨機數種子來解決這個問題

初始化隨機函數的種子

  • 形式: void srand( unsigned int seed );
  • 參數:?seed?為無符號整形,用來初始化隨機函數的種子
  • 注意: 一般都是通過抓起系統時間來做隨機函數的種子 srand( (unsigned)time( NULL ) );//記得包含<time.h>頭文件

system函數:

  • 形式:int system( const char *command ); [cpp]?view plaincopy print?
  • system("ping?10.10.10.11?-t")??
  • system("cls")??
  • 作用: system()函數用于向操作系統傳遞控制臺命令行
  • 常用DOS命令:
    • ASSOC?顯示或修改文件擴展名關聯
    • AT?計劃在計算機上運行的命令和程序
    • ATTRIB?顯示或更改文件屬性
    • BREAK?設置或清除擴展式 CTRL+C 檢查
    • CACLS?顯示或修改文件的訪問控制列表(ACLs)
    • CALL?從另一個批處理程序調用這一個
    • CD?顯示當前目錄的名稱或將其更改
    • CHCP?顯示或設置活動代碼頁數
    • CHDIR?顯示當前目錄的名稱或將其更改
    • CHKDSK?檢查磁盤并顯示狀態報告
    • CHKNTFS?顯示或修改啟動時間磁盤檢查
    • CLS?清屏幕
    • CMD?打開另一個 Windows 命令解釋程序窗口
    • COLOR?設置默認控制臺前景和背景顏色
    • COMP?比較兩個或兩套文件的內容
    • COMPACT?顯示或更改 NTFS 分區上文件的壓縮
    • CONVERT?將 FAT 卷轉換成 NTFS。您不能轉換當前驅動器
    • COPY?將至少一個文件復制到另一個位置
    • DATE?顯示或設置日期
    • DEL?刪除至少一個文件
    • DIR?顯示一個目錄中的文件和子目錄
    • DISKCOMP?比較兩個軟盤的內容
    • DISKCOPY?將一個軟盤的內容復制到另一個軟盤
    • DOSKEY?編輯命令行、調用 Windows 命令并創建宏
    • ECHO?顯示消息,或將命令回顯打開或關上
    • ENDLOCAL?結束批文件中環境更改的本地化
    • ERASE?刪除至少一個文件
    • EXIT?退出 CMD.EXE 程序(命令解釋程序)
    • FC?比較兩個或兩套文件,并顯示不同處
    • FIND?在文件中搜索文字字符串
    • FINDSTR?在文件中搜索字符串
    • FOR?為一套文件中的每個文件運行一個指定的命令
    • FORMAT?格式化磁盤,以便跟 Windows 使用
    • FTYPE?顯示或修改用于文件擴展名關聯的文件類型
    • GOTO?將Windows命令解釋程序指向批處理程序中某標明行
    • GRAFTABL?啟用 Windows 來以圖像模式顯示擴展字符集
    • HELP?提供 Windows 命令的幫助信息
    • IF?執行批處理程序中的條件性處理
    • LABEL?創建、更改或刪除磁盤的卷標
    • MD?創建目錄
    • MKDIR?創建目錄
    • MODE?配置系統設備
    • MORE?一次顯示一個結果屏幕
    • MOVE?將文件從一個目錄移到另一個目錄
    • PATH?顯示或設置可執行文件的搜索路徑
    • PAUSE?暫停批文件的處理并顯示消息
    • POPD?還原 PUSHD 保存的當前目錄的上一個值
    • PRINT?打印文本文件
    • PROMPT?更改 Windows 命令提示符
    • PUSHD?保存當前目錄,然后對其進行更改
    • RD?刪除目錄
    • RECOVER?從有問題的磁盤恢復可讀信息
    • REM?記錄批文件或 CONFIG.SYS 中的注釋
    • REN?重命名文件
    • RENAME?重命名文件
    • REPLACE?替換文件
    • RMDIR?刪除目錄
    • SET?顯示、設置或刪除 Windows 環境變量
    • SETLOCAL?開始批文件中環境更改的本地化
    • SHIFT?更換批文件中可替換參數的位置
    • SORT?對輸入進行分類
    • START?啟動另一個窗口來運行指定的程序或命令
    • SUBST?將路徑跟一個驅動器號關聯
    • TIME?顯示或設置系統時間
    • TITLE?設置 CMD.EXE 會話的窗口標題
    • TREE?以圖形模式顯示驅動器或路徑的目錄結構
    • TYPE?顯示文本文件的內容
    • VER?顯示 Windows 版本
    • VERIFY?告訴 Windows 是否驗證文件是否已正確寫入磁盤
    • VOL?顯示磁盤卷標和序列號
    • XCOPY?復制文件和目錄樹
    • SHUTDOWNWindows 系統關機命令
      • 格式: shutdown [-s | -a | -l | -r ] [-t seconds]
        • 參數說明:
          • -s:就表示關閉本地計算機
          • -a:表示取消關機操作
          • -f:強行關閉應用程序
          • -l:注銷當前用戶
          • -r:關機并重啟
          • -t: 時間:設置關機倒計時
          • -c: “消息內容”:輸入關機對話框中的消息內容(不能超127個字符)
      • 例子: Shutdown -s -t 1320 (注意:引號不輸入,參數之間有空格,1320的單位是秒)
<cstdarg>頭文件

宏與類型定義

_INTSIZEOF宏

宏定義:

[cpp]?view plaincopy print?
  • //?vadefs.h??
  • #define?_INTSIZEOF(n)???(?(sizeof(n)?+?sizeof(int)?-?1)?&?~(sizeof(int)?-?1)?)??
  • _ADDRESSOF

    宏定義:

    [cpp]?view plaincopy print?
  • //?vadefs.h??
  • #define?_ADDRESSOF(v)???(?&reinterpret_cast<const?char?&>(v)?)??
  • va_start宏

    宏定義:

    [cpp]?view plaincopy print?
  • //?stdarg.h???
  • #define?va_start?_crt_va_start??
  • //?vadefs.h??
  • #define?_crt_va_start(ap,v)??(?ap?=?(va_list)_ADDRESSOF(v)?+?_INTSIZEOF(v)?)??
  • 作用:?使 va_list 指向起始的參數
    參數:

    • ap?為 va_list 類型的變量
    • v?函數的第一個固定參數

    va_arg宏

    宏定義:?

    [cpp]?view plaincopy print?
  • //?stdarg.h??
  • #define?va_arg?_crt_va_arg??
  • //?vadefs.h??
  • #define?_crt_va_arg(ap,t)????(?*(t?*)((ap?+=?_INTSIZEOF(t))?-?_INTSIZEOF(t))?)??
  • 作用:?檢索參數,每次提取一次可變參數,arg 就向上移動一次.無論它現在指向的是不是參數它都會讀取arg參數里存放地址里的內容
    參數:

    • ap?為 va_list 類型的變量
    • t?為回傳的型態

    va_end宏

    宏定義:

    [cpp]?view plaincopy print?
  • //?stdarg.h??
  • #define?va_end?_crt_va_end??
  • //?vadefs.h??
  • #define?_crt_va_end(ap)??????(?ap?=?(va_list)0?)??
  • 作用:?釋放 va_list
    參數:?ap?為 va_list 類型的變量

    va_list類型

    定義:

    [cpp]?view plaincopy print?
  • //?stdarg.h??
  • typedef?char?*??va_list;??

  • ?

    對于函數

    形式:

    • type va_arg( va_list arg_ptr, type );
    • void va_end( va_list arg_ptr );
    • void va_start( va_list arg_ptr ); (UNIX version)
    • void va_start( va_list arg_ptr, prev_param ); (ANSI version)

    參數解釋:

    • type: Type of argument to be retrieved
    • arg_ptr: Pointer to list of arguments
    • prev_param: Parameter

    ?

    使用可變參數

    使用可變參數的下步驟

    • 首先在函數里定義一個 va_list 型的變量,這里是 arg_ptr,這個變量是指向參數的指針.
    • 然后用 va_start 宏初始化變量 arg_ptr,這個宏的第二個參數是第一個可變參數的前一個參數,是一個固定的參數.
    • 然后用 va_arg 返回可變的參數,并賦值給整數 j. va_arg的第二個 參數是你要返回的參數 的類型,這里是 int 型.
    • 最后用 va_end 宏結束可變參數的獲取.然后你就可以在函數里使用第二個參數了.如果函數有多個可變參數的,依次調用 va_arg 獲取各個參數

    C 語言的函數是從右向左壓入堆棧的,下圖是函數的參數在堆棧中的分布位置:


    例子

    輸出所有int型態的參數,直到-1結束:

    [cpp]?view plaincopy print?
  • #include<iostream>??
  • #include?<cstdarg>??
  • using?namespace?std;??
  • ??
  • void?printargs(int?arg1,...)??
  • {??
  • ????va_list?ap;??
  • ????//聲明變量?ap,用于指向參數??
  • ????int?i;??
  • ????va_start(ap,arg1);??
  • ????//獲得第一個參數的地址??
  • ????//va_start(ap,arg1);?把宏展開來看等價于??
  • ????//(ap?=(char*)(&reinterpret_cast<const?char&>(arg1))+((sizeof(arg1)+sizeof(int)-1)&~(sizeof(int)-?1)));??
  • ????for(i=arg1;i!=-1;i=va_arg(ap,int))??
  • ????//va_arg(ap,int)?把宏展開來看等價于??
  • ????//(*(int*)((ap?+=((sizeof(int)+sizeof(int)-?1)&~(sizeof(int)-?1)))-((sizeof(int)+sizeof(int)-?1)?&~(sizeof(int)-?1))))??
  • ????//輸出所有int型態的參數,直到-1結束??
  • ????????cout<<i<<'?';??
  • ????va_end(ap);??
  • ????//va_end(ap);?把宏展開來看等價于??
  • ????//(ap?=(char*)0)??
  • ????cout<<endl;??
  • }??
  • int?main(void)??
  • {??
  • ????printargs(5,2,14,84,97,15,24,48,-1);??
  • ????printargs(84,51,-1);??
  • ????printargs(-1);??
  • ????printargs(1,-1);??
  • ????system("pause");??
  • ????return?0;??
  • }??
  • 輸出結果:

    5 2 14 84 97 15 24 48
    84 51
    ?
    1
    請按任意鍵繼續. . .

    用可變參數第一參數為參數的長度說明:

    [cpp]?view plaincopy print?
  • #include<iostream>??
  • #include?<cstdarg>??
  • using?namespace?std;??
  • ??
  • void?output(int?n,?...);??
  • void?main()??
  • {??
  • ????output(3,"王一",12,"李二",5,"趙三",58);??
  • ????system("pause");??
  • }??
  • void?output(int?n,?...)??
  • {??
  • ????va_list?ap;??
  • ????va_start(ap,n);?//起到初始化,使用得?ap?指向可變參數的第一個參數,即?n?處??
  • ????while(n--)??
  • ????{??
  • ????????char*?name=va_arg(ap,char*);????
  • ????????//獲得當前?ap?所指向的參數,并使?ap?指向可變參數的下一個參數,并且要指明獲得的參數類型char*?為需要獲得的參數的類型.??
  • ????????int?age=va_arg(ap,int);????//同上,int為參數類型??
  • ????????cout<<"name?:"<<name<<",age="<<age<<endl;??
  • ????}??
  • ????va_end(ap);??//結束可變參數獲取??
  • }??
  • ?輸出結果:

    name :王一,age=12
    name :李二,age=5
    name :趙三,age=58
    請按任意鍵繼續. . .

    若把上例子中的函數調用由?output(3,"王一",12,"李二",5,"趙三",58); 改為output(3,"王一",12,"李二",5); 時候輸出結果變成了這樣(在參數后面還有跟著一些函數的相關信息):

    name :王一,age=12
    name :李二,age=5
    name :兡 ?0@,age=1
    請按任意鍵繼續. . .

    若把上例子中的函數調用由?output(3,"王一",12,"李二",5,"趙三",58); 改為output(3,"王一",12,"李二"); 時候輸出結果變成了這樣(錯誤說明:讀取的地址無效,.va_arg 提取地址發生錯誤):

    <ctime>頭文件

    “時間”和“日期”的概念?

    Coordinated Universal Time(UTC):

    協調世界時,又稱為世界標準時間,也就是大家所熟知的格林威治標準時間(Greenwich Mean Time,GMT).比如,中國內地的時間與UTC的時差為+8,也就是UTC+8.美國是UTC-5

    Calendar Time:

    日歷時間:是用“從一個標準時間點到此時的時間經過的秒數”來表示的時間.這個標準時間點對不同的編譯器來說會有所不同,但對一個編譯系統來說,這個標準時間點是不變的,該編譯系統中的時間對應的日歷時間都通過該標準時間點來衡量,所以可以說日歷時間是“相對時間”,但是無論你在哪一個
    時區,在同一時刻對同一個標準時間點來說,日歷時間都是一樣的.epoch:時間點時間點在標準C/C++中是一個整數,它用此時的時間和標準時間點相差的秒
    數(即日歷時間)來表示

    clock tick:

    時鐘計時單元(而不把它叫做時鐘滴答次數),一個時鐘計時單元的時間長短是由 CPU 控制的.一個 clock tick 不是C PU 的一個時鐘周期,而是C/C++的一個基本計時單位.

    ?


    ?

    重要的宏

    CLOCKS_PER_SEC

    說明:每秒鐘的滴答數
    定義:

    #define CLOCKS_PER_SEC ((clock_t) 000)?

    用途:它用來表示一秒鐘會有多少個時鐘計時單元

    clock_t

    說明:滴答計數類型
    定義:

    [cpp]?view plaincopy print?
  • #ifndef?_CLOCK_T_DEFINED??
  • ????typedef?long?clock_t;??
  • #define?_CLOCK_T_DEFINED??
  • #endif??
  • 注意:其中clock_t是用來保存時間的數據類型

    time_t

    說明:日歷時間的秒計數

    定義:

    [cpp]?view plaincopy print?
  • #ifndef?__TIME_T??
  • #define?__TIME_T?/*?避免重復定義?time_t?*/??
  • typedef?long?time_t;?/*?時間值time_t?為長整型的別名*/??
  • #endif??
  • 注意:對time_t數據類型的值來說,它所表示的時間不能晚于2038年 月 8日 9時 4分07秒.?

    ?


    ?

    重要數據類型

    struct tm

    說明:年月日等得細分時間數據結構

    ?

    [cpp]?view plaincopy print?
  • struct?tm{??
  • ????int?tm_sec;??????/*?Seconds.?????[0-60]?(??leap?second)?*/??
  • ????int?tm_min;??????/*?Minutes.?????[0-59]?*/??
  • ????int?tm_hour;?????/*?Hours.???????[0-23]?*/??
  • ????int?tm_mday;????/*?Day.?????????[?-3?]?*/??
  • ????int?tm_mon;??????/*?Month.???????[0-??]?*/??
  • ????int?tm_year;?????/*?Year?-??900.?*/??
  • ????int?tm_wday;?????/*?Day?of?week.?[0-6]?*/??
  • ????int?tm_yday;?????/*?Days?in?year.[0-365]?*/??
  • ????int?tm_isdst;????/*?DST.?????????[-?/0/?]*/??
  • #ifdef?__USE_BSDlong?int?tm_gmtoff;???/*?Seconds?east?of?UTC.?*/??
  • ????__const?char?*tm_zone;????????/*?Timezone?abbreviation.?*/??
  • #elselong?int?__tm_gmtoff;?????????/*?Seconds?east?of?UTC.?*/??
  • ????__const?char?*__tm_zone;??????/*?Timezone?abbreviation.?*/??
  • #endif??
  • };??

  • ?

    函數

    clock 函數

    • 原型:clock_t clock( void );
    • 作用:返回本程序自啟動來,流逝的時鐘計時單元.

    difftime 函數

    • 原型:double difftime( time_t timer ,time_t timer0 );
    • 作用:返回兩個日歷時間之差timer -timer0;

    time 函數

    • 原型:time_t time( time_t *timer );
    • 作用:獲取機子的時間
    • 注意:如果,timer不為空,則同時將返回值賦給timer指向的變量.

    mktime 函數

    • 原型:time_t mktime(struct tm *timeptr );
    • 作用:將由年月日時分秒等構成的細分時間轉換為流逝秒數構成的日歷時間.

    localtime 函數

    • 原型:struct tm *localtime(const time_t *timer);
    • 作用:將日歷時間轉換為本地細分時間

    gmtime函數

    • 原型:struct tm *gmtime( const time_t *timer);
    • 作用:將日歷時間轉換為UTC(世界協調時間)的細分時間
    • 注意:localtime與gmtime,前者比后者多8個小時

    asctime函數

    • 原型:char *asctime( const struct tm *timeptr );
    • 作用:將細分時間轉換為簡寫字符串

    ctime函數

    • 原型:char *ctime( const time_t *timer );
    • 作用:將日歷時間轉換為簡寫字符串

    strftime函數

    • 原型:size_t strftime(char *strDest, size_t maxsize, const char *format, const struct tm *timeptr );
    • 作用:將細分時間按format的格式要求格式化到strDest指向的緩沖區

    函數strftime()的操作有些類似于sprintf():識別以百分號(%)開始的格式命令集合,格式化輸出結果放在一個字符串中.格式化命令說明串strDest中各種日期和時間信息的確切表示方法.格式串中的其他字符原樣放進串中.格式命令列在下面,它們是區分大小寫的.

    • %a 星期幾的簡寫
    • %A 星期幾的全稱
    • %b 月分的簡寫
    • %B 月份的全稱
    • %c 標準的日期的時間串
    • %C 年份的后兩位數字
    • %d 十進制表示的每月的第幾天
    • %D 月/天/年
    • %e 在兩字符域中,十進制表示的每月的第幾天
    • %F 年-月-日
    • %g 年份的后兩位數字,使用基于周的年
    • %G 年分,使用基于周的年
    • %h 簡寫的月份名
    • %H 24小時制的小時
    • %I 2小時制的小時
    • %j 十進制表示的每年的第幾天
    • %m 十進制表示的月份
    • %M 十時制表示的分鐘數
    • %n 新行符
    • %p 本地的AM或PM的等價顯示
    • %r 2小時的時間
    • %R 顯示小時和分鐘:hh:mm %S 十進制的秒數
    • %t 水平制表符 %T 顯示時分秒:hh:mm:ss
    • %u 每周的第幾天,星期一為第一天 (值從0到6,星期一為0)
    • %U 第年的第幾周,把星期日做為第一天(值從0到53)
    • %V 每年的第幾周,使用基于周的年
    • %w 十進制表示的星期幾(值從0到6,星期天為0)
    • %W 每年的第幾周,把星期一做為第一天(值從0到53)
    • %x 標準的日期串
    • %X 標準的時間串
    • %y 不帶世紀的十進制年份(值從0到99)
    • %Y 帶世紀部分的十制年份
    • %z,%Z 時區名稱,如果不能得到時區名稱則返回空字符.%% 百分號

    <ctype>頭文件

    函數 isalpha

    • 原型: int isalpha(int ch);
    • 返回值: 檢查 ch 是否是字母.
    • 返回值: 是字母返回非 0 ,否則返回 0 

    函數 iscntrl

    • 原型: int iscntrl(int ch);
    • 返回值: 檢查 ch 是否控制字符(其 ASCII 碼在 0x00 到 0x1F 之間).
    • 返回值: 是返回非 0,否則返回 0.

    函數 isdigit

    • 原型: int isdigit(int ch);
    • 返回值: 檢查 ch 是否是數字( 0-9 )
    • 返回值: 是返回非 0,否則返回 0

    函數 isgraph

    • 原型: int isgraph(int ch);
    • 返回值: 檢查 ch 是否可顯示字符(其 ASCII 碼在 0x21 到 0x7E 之間),不包括空格
    • 返回值: 是返回非 0,否則返回 0

    函數 islower

    • 原型: int islower(int ch);
    • 返回值: 檢查 ch 是否小寫字母(a-z)
    • 返回值: 是返回非 0,否則返回 0  

    函數 tolower

    • 原型: int tolower(int ch);
    • 返回值: 將 ch 字符轉換為小寫字母
    • 返回值: 返回 ch 所代表的字符的小寫字母  

    函數 toupper

    • 原型: int toupper(int ch);
    • 返回值: 將 ch 字符轉換成大寫字母
    • 返回值: 與 ch 相應的大寫字母   

    函數 isalnum

    • 原型: int isalnum(int ch);
    • 返回值: 檢查 ch 是否是字母或數字
    • 返回值: 是字母或數字返回 1,否則返回 0 

    函數 isprint

    • 原型: int isprint(int ch);
    • 返回值: 檢查 ch 是否可打印字符(包括空格),其 ASCII 碼在?0x20 到 0x7E 之間
    • 返回值: 是返回非 0,否則返回 0  

    函數 ispunct

    • 原型: int ispunct(int ch);
    • 返回值: 檢查 ch 是否是標點字符(不包括空格),即除字母,數字和空格以外的所有可打印字符
    • 返回值: 是返回非 0,否則返回 0  

    函數 isspace

    • 原型: int isspace(int ch);
    • 返回值: 檢查ch是否是空格符和跳格符(控制字符)或換行符
    • 返回值: 是返回非 0,否則返回 0 

    函數 isupper

    • 原型: int isupper(int ch);
    • 返回值: 檢查ch是否是大寫字母(A-Z)
    • 返回值: 是返回非 0,否則返回 0

    函數 isxdigit

    • 原型: int isxdigit(int ch);
    • 返回值: 檢查 ch 是否是一個 16 進制數學字符(即 0-9,或 A-F,或 a-f)
    • 返回值: 是返回非 0,否則返回 0

    函數 isascii

    • 原型: int isascii(int ch);
    • 返回值: 測試參數是否是 ASCII 碼 0-127
    • 返回值:?是返回非 0,否則返回 0
    <cstring>頭文件

    函數 strcpy

    • 原型:?char* strcpy (char *s1, const char *s2);
    • 作用:?將字符串 2 復制到字符數組 1 當中去
    • 說明:
      • 字符數組 1 的長度應不小于字符串2的長度
      • "字符數組 1" 必須寫成數組名形式,"字符串 2" 可以為字符數組名,也可以是一個字符串常量
      • 在未對字符數組 1 賦初值時,復制時將 "字符串 2" 中的字符串和其后的 "/0" 一起復制到字符數組 1 中,取代其前 n+1 個字符,而后面的字符是 "字符數組 1" 原字符

    函數 strncpy

    • 原型:?char* strncpy (char *s1, const char *s2, size_t len);
    • 作用:?將 s2 的前 len 個字符復制到 s1 中指定的地址, 不加 '\0'

    函數 memcpy?

    • 原型:?void* memcpy (void *s1, const void *s2, size_t len);
    • 作用:?將 s2 的前 len 個字節復制到 s1 中指定的地址, 不加 '\0'
    • 說明:?源和目的不能是同一塊內存區域

    函數 memmove?

    • 原型:?void* memmove (void *s1, const void *s2, size_t len);
    • 作用:?當源單元和目的單元緩沖區交迭時使用
    • 說明:?源和目的可以是同一塊內存區域(例如數組某個元素在數組存儲器內部移動數據)

    函數 strxfrm

    • 原型:?size_t strxfrm (char *s1, const char *s1, size_t len);
    • 作用:?根據程序當前的區域選項,將 s2 的前 len 個字符(字節)復制到 s1 中指定的地址, 不加 '\0'

    函數 strcat?

    • 原型:?char* strcat (char *s1, const char *s2);
    • 作用:?把字符串 2 接到字符串 1 后面(字符串 1 要足夠大)
    • 說明:?連接前兩個字符串都有 "/0" ,連接時將字符串1后 "/0" 丟棄,只在新字符串后保留 '/0'

    函數 strncat?

    • 原型:char* strncat (char *s1, const char *s2, size_t len);
    • 作用:?將字符串 s2 的前 len 個字符連接到 s1 尾部, 不加 '\0'

    函數 strcmp?

    • 原型:?int strcmp (const char *s1, const char *s2); ①作用:比較字符串1與字符串2
    • 規律:?兩個字符串自左至右逐個字符相比(按 ASCII 碼值大小比較)直到出現不同的字符或者遇到 "/0" 為止,如果全部字符相同,則認為相等,若出現不同字符,則以第一個不相同的字符為準
    • 準則:
      • 如果字符串 1=字符串 2,函數返回值為 0
      • 如果字符串 1>字符串 2,函數返回值為正數
      • 如果字符串1<字符串 2,函數返回值為負數

    函數 strncmp

    • 原型:?int strncmp (const char *s1, const char *s2, size_t len);
    • 作用:?對 s1 和 s2 的前len個字符作比較

    函數 memcmp

    • 原型:?int memcmp (const void *s1, const void *s2, size_t len);
    • 作用:?對 s1 和 s2 的前 len 個字節作比較

    函數 strcoll

    • 原型:?int strcoll (const char *s1, const char *s2);
    • 作用:?根據程序當前的區域選項中的 LC_COLLATE, 比較字符串 s1 和 s2

    函數 strchr

    • 原型:?char* strchr (const char *s, int ch);
    • 作用:?在 s 中查找給定字符 ch 第一次出現的位置

    函數 memchr

    • 原型:?void* memchr (const void *s, int ch, size_t len);
    • 作用:?查找在字符串中最后一次出現字符 ’ch’ 的位置。如果 s 中存在字符 ch,返回出現 ch 的位置的指針;否則返回NULL。

    函數 strrchr

    • 原型:?char* strrchr (const char *s, int ch);
    • 作用:?在串 s 中查找給定字符 ch 最后一次出現的位置, r表示從串尾開始

    函數 strstr

    • 原型:?char* strstr (const char *s1, const char *s2);
    • 作用:?在串 s1 中查找指定字符串 s2 第一次出現的位置

    函數?strspn

    • 原型:?size_t strspn (const char *s1, const char *s2);
    • 作用:?返回一個長度,這個長度是在 s1 中沒有出現 s2 任意字符的從 s1 頭計算的字符串的長度。

    函數 strcspn

    • 原型:?size_t strcspn (const char *s1, const char *s2);
    • 作用:?返回一個長度,這個長度是在 s1 中沒有出現 s2 任意字符的從 s1 頭計算的字符串的長度。

    函數 strpbrk

    • 原型:?char* strpbrk (const char *s1, const char *s2);
    • 作用:?與 strcspn 類似, 區別是返回指針而不是索引

    函數 strtok

    • 原型:?char* strtok (char *s1, const char *s2);
    • 函數執行步驟:
      • 從串s1中分離出由串 s2 中指定的分界符分隔開的記號(token)
      • 第一次調用時 s1 為需分割的字串, 此后每次調用都將 s1 置為 NULL,
      • 每次調用 strtok 返回一個記號, 直到返回 NULL 為止
    • 作用:?分解字符串為一組字符串。s 為要分解的字符串,delim 為分隔符字符串。實質上的處理是,strtok 在 s 中查找包含在 delim 中的字符并用 NULL(’\0′) 來替換,直到找遍整個字符串。
    • 返回值:?從 s 開頭開始的一個個被分割的串。當沒有被分割的串時則返回 NULL。所有?delim 中包含的字符都會被濾掉,并將被濾掉的地方設為一處分割的節點。

    函數 strlen

    • 原型:?size_t strlen (const char *s);
    • 作用:?它是測試字符串長度的函數,函數的值為字符串中的實際長度(不包括 "/0")

    函數 memset

    • 原型:?void* memset (void *s, int val, size_t len);
    • 作用:?將從 s 開始的 len 個字節置為 val

    函數 strerror

    • 原型:?char* strerror (int errno);
    • 作用:?返回指向錯誤信息字符串的指針

    函數 _strlwr

    • 原型:?char *_strlwr( char *string );
    • 作用:?把字符串中的大寫字母換成小寫字母

    函數 _strupr

    • 原型:?char *_strupr( char *string );
    • 作用:?把字符串中的小寫字母換成大寫字母
    <cmath>頭文件

    ceil (x)       x取整為不小于x的最小整數值
    cos(x)?      ?x(x弧度)的余弦值
    fabs(x)?      x的絕對值
    floor(x)?      x取整為不大于x的最大整數值
    fmod(x,y)?     x/y的浮點余數值
    log(x)        x(底數為e)的自然對數值
    log10(x)?     ? x(底數為10)的自然對數值
    pow(x,y)?     ?x的y次冪(x^y)的值
    sin(x)?       ?x(弧度)的正弦值
    sqrt(x)?      x的平方根的值
    tan(x)       ? x(弧度)的正切值
    exp(x)       ? 指數函數e^x的值
    acos(x)?      x(弧度)的反余弦值
    asin(x)?      ?x(弧度)的反正弦值
    atan(x)?      ?x(弧度)的反正切值
    tanh(x)?      ?x(弧度)的雙曲正切值
    cosh(x)?       x(弧度)的雙曲余弦值
    sinh(x)?       ?x(弧度)的雙曲正弦值
    ldexp(y,x)?     返回y*2^x的值
    atan2(y,x)?    ??返回反正切的表達式y / x?
    frexp(y,&x)?     把一個浮點數分解為尾數和指數, y要分解的浮點數據,x存放指數 返回值為尾數,公式:其中 y(浮點數) = 返回值(尾數) * 2^x(指數)
    modf(y,&x)?    分解y,以得到y的整數(返回值)和小數部分(放在x參數中)

    <climits>頭文件

    <climits>頭文件定義的符號常量

    CHAR_MIN?      char的最小值
    SCHAR_MAX?     signed char 最大值
    SCHAR_MIN?     ?signed char 最小值
    UCHAR_MAX?     unsigned char 最大值
    SHRT_MAX?      short 最大值
    SHRT_MIN       short 最小值
    USHRT_MAX      unsigned short 最大值
    INT_MAX       int 最大值
    INT_MIN?       int 最小值
    UINT_MAX?      unsigned int 最大值
    UINT_MIN??      unsigned int 最小值
    LONG_MAX      long最大值
    LONG_MIN?      long最小值
    ULONG_MAX?     unsigned long 最大值
    FLT_MANT_DIG    float 類型的尾數
    FLT_DIG        ?float 類型的最少有效數字位數
    FLT_MIN_10_EXP   帶有全部有效數的float類型的負指數的最小值(以10為底)
    FLT_MAX_10_EXP?  ?float類型的正指數的最大值(以10為底)
    FLT_MIN?       保留全部精度的float類型正數最小值
    FLT_MAX       ?float類型正數最大值



    總結

    以上是生活随笔為你收集整理的stringcstdlibctimecstdargctimectypecmathclimits的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。