第四章總結(一)

創建和使用數組

創建數組就很簡單了,就直接typeName arrayName[size],這裏的typeName 可以是你自己定義的結構體,也可以是基本數據類型,然後這裏的size如果是在VS編譯器中,必須是常量或者是const變量,這裏的常量是說你直接把size寫死,比如int a[5]。
但是實際這種還是不太方便,因爲我們有時候確實不知道數組應該開多大,這裏就需要我們去動態的申請數組,也就是使用new,直接用代碼講解

#include<iostream>
using namespace std;

int main()
{
	int size;
	cin >> size;
	int i;
	//創建部分
	int* myArrat = new int[size];
	for (int i = 0;i < size;i++)
	{
		myArrat[i] = i;
	}
	//使用部分
	for (int i = 0;i < size;i++)
	{
		//這裏的myArrat指向空間的首地址,myArrat+i表示跳到下一個元素的地址
		*(myArrat + i) = 10 * i;
	}
	for (int i = 0;i < size;i++)
		cout << myArrat[i] << endl;
	return 0;
}

在這裏插入圖片描述

初始化部分

除了常規的初始化方法,也可以使用上一篇講過的大括號的方法
int a[5] = {0} 所有元素初始化爲0
int a[5] = {10} 第一個元素爲10,後面都爲0
int a[5]{} 所有元素初始化爲0
同樣大括號不允許縮窄轉換,及不允許int a[5]{1.0}

字符串

C風格字符串

C風格字符串就是以空字符’\0’結尾的char數組,下面代碼可以看出,strlen等字符串操作函數都是以最後的空字符作爲結束的標記

char a[3] = { 'a', 'b', 'c' };
char b[4] = { 'a', 'b', 'c', '\0' };
cout << strlen(b) << endl; //3
cout << 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)混合使用及可能出現的問題,參考下面博客
https://blog.csdn.net/leowinbow/article/details/82190631

我自己的話總結一下就是,cin>>在你輸入的時候,你按回車,會把你敲得東西放進緩衝區,然後回車產生的換行符也被送了進去,然後檢測到緩衝區有換行,cin>>便把緩衝區的數據放進變量裏,然後換行符還在緩衝區,這樣緊接着使用cin.getline(str, size),cin.get(str,size),以及getline(inStream,str)時就會把換行符讀走,導致和我們想的不一樣,那爲什麼連續兩次使用cin卻不會異常呢,因爲cin的時候,並不是只要讀取到回車符就執行完cin,而是必須要讀取到相對應的類型的內容從鍵盤敲入,纔會真正執行完cin,不允許輸入爲空,所以cin>>在等待鍵盤敲入時,你哪怕先敲回車符,cin>>語句也不會執行結束

string類簡介

頭文件 #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 <<"---"<<ch2;

但是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

拼接的話,char數組使用strncat,string直接用+號就行了,然後這裏只是做一個簡介,因爲後面第十六章的時候還會詳細介紹

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章