字串string類簡介
建立陣列就很簡單了,就直接typename arrayname[size],這裡的typename 可以是你自己定義的結構體,也可以是基本資料型別,然後這裡的size如果是在vs編譯器中,必須是常量或者是const變數,這裡的常量是說你直接把size寫死,比如int a[5]。
但是實際這種還是不太方便,因為我們有時候確實不知道陣列應該開多大,這裡就需要我們去動態的申請陣列,也就是使用new,直接用**講解
#include
using
namespace std;
intmain()
//使用部分
c風格字串就是以空字元』\0』結尾的char陣列,下面**可以看出,strlen等字串操作函式都是以最後的空字元作為結束的標記
char a[3]
=;char b[4]
=;cout <<
strlen
(b)<< endl;
//3cout <<
sizeof
(b)<< endl;
//4
但是上面這種方法未免太過麻煩, 需要乙個字母乙個字母的寫,所以有了下面這種寫法
char a = 「hello world」;
這種寫法char陣列a的長度會被編譯器自動初始化,然後"hello world"被稱為字串常量
關於cin>>,cin.getline(str, size),cin.get(str,size),cin.get(),以及getline(istream,string)混合使用及可能出現的問題,參考下面部落格
我自己的話總結一下就是,cin>>在你輸入的時候,你按回車,會把你敲得東西放進緩衝區,然後回車產生的換行符也被送了進去,然後檢測到緩衝區有換行,cin>>便把緩衝區的資料放進變數裡,然後換行符還在緩衝區,這樣緊接著使用cin.getline(str, size),cin.get(str,size),以及getline(instream,str)時就會把換行符讀走,導致和我們想的不一樣,那為什麼連續兩次使用cin卻不會異常呢,因為cin的時候,並不是只要讀取到回車符就執行完cin,而是必須要讀取到相對應的型別的內容從鍵盤敲入,才會真正執行完cin,不允許輸入為空,所以cin>>在等待鍵盤敲入時,你哪怕先敲回車符,cin>>語句也不會執行結束
標頭檔案 #include,然後string str,str的型別是乙個string,但是str[0]的型別是乙個char,然後string的物件可以自動改變大小,初始化的話既可以使用大括號,也可以直接指定字串常量上去
之前我們使用char陣列的時候,如果需要進行賦值,可能會出現問題,但是string的話就不會了,比如下面這段**
string str1 =
"hello"
; string str2 = str1;
char ch1[6]
="hello"
;char ch2[10]
;strncpy_s
(ch2, ch1,2)
;//這裡表示從ch1中拷貝兩個字元到ch2中,但是ch2是否有空間儲存,這個無法判斷,如果是char ch2[1]的話,還是會有執行時錯誤
cout << str2 <<
"---"
<
但是string就不會出現這種問題,因為可以自己調整容量,這一點可以通過string類的capacity方法檢視,這個方法返回的就是系統為string物件開闢的容量,當容量滿的時候,會自動新增,而且擴容也是有規律的,至於為什麼是16,應該是和不同的平台或者編譯器有關
(環境為vs2019)
string str1 =
"hello"
; cout << str1.
size()
<< endl;
//5 cout << str1.
capacity()
<< endl;
// 15
str1 =
"hello hello hello"
; cout << str1.
size()
<< endl;
//17
cout << str1.
capacity()
<< endl;
//31
str1 =
"hello hello hello messi messi messi"
; cout << str1.
size()
<< endl;
//35
cout << str1.
capacity()
<< endl;
//47
上述**在dev c++中的測試結果為55
1717
3535
在ubuntu19.04 g++8.3.0中測試結果,是直接翻倍的515
1730
3560
拼接的話,char陣列使用strncat,string直接用+號就行了,然後這裡只是做乙個簡介,因為後面第十六章的時候還會詳細介紹
第四章總結
1.對貪心演算法的認識 貪心演算法在求解問題時,不從整體上考慮,而是得到某種意義上的區域性最優解,做出當前看來是最好的選擇。每次的選擇都會依賴之前作出的選擇,而對後面的選擇不會產生影響。它具有最優子結構的性質,即問題的最優解包含其子問題的最優解。但貪心演算法不是對於所有的問題都能得到整體最優解,最重...
第四章(筆記總結)
簡單的組合語言源程式基本語法 assume cs code code segment mov ax 0001h add ax ax mov ax 4c00h int 21h code ends end在組合語言源程式中,包含兩種指令分別是,彙編指令和偽指令 彙編指令 1 mov ax 0001h i...
第四章作業總結
include using namespace std int main cout a endl system pause return 0 注意getchar 不能迴圈條件用一次,算式中再用一次,否則算兩次getchar 只能先設個變數再用。將使用者輸入的任意十進位制整數轉換為16進製制數輸出 利...