奇妙的字串

2021-06-29 09:03:08 字數 3365 閱讀 6937

面對字串是我們最關係的就是字串的長度(用strlen())與它所佔的位元組數(用sizeof())也就是大小,下來我們就討論一下 

/* 一般我們初始化字串的幾種方式

char a1="1234";

char *a2="1234";

char a3[10]="1234";

char a4=;

char a5=;

char a6[10]=;

char a7[10]=;

char *a6=;//錯誤 可能有的編譯器.c可以通過

char *a5=;//必須給指標乙個字串首位址這個沒有給

char *a7=;//錯誤

char a[2]="1234";//當然它是錯的 不是因為名字是大寫奧(哈哈)

char a[1]='1';//當然它也是錯的

char *a='1';//當然它也是錯的

char a[10]="'1','2'";//當然它也是錯的

char a='1','2'";//當然它也是錯的

char *a="'1','2'";//當然它也是錯的

char a[10]=;//當然它也是錯的 " "之間是字串 ' '之間是字元

char *a=;//當然它也是錯的

*/

是不是感覺這莫簡單的東西如果細分還有這莫多東西呢,下來我就**一下我的理解

//情況一:

#includeint main()

//對於上邊的**輸出結果是什麼

// 答案是:49 4 5

// 49 是因為這裡是字元1

//4 是因為strlen()函式在計算長度時找'\0',對於這種字串會末尾預設有'\0',當strlen()遇到'\0'就會停止計算,所以個數不包括'\0'

//5 是因為sizeof()這個運算子(這裡也提一句sizeof 是運算子不是函式而且是乙個關鍵字)會計算位元組數這裡都是字元型別所以只佔5個位元組(也包括後邊的'\0')

//情況二:

#includeint main()

//對於上邊的**輸出結果是什麼

// 答案是:1 4 5

// 1 是因為這裡是轉義字元為數字1

//4 是因為strlen()函式在計算長度時找'\0',對於這種字串會末尾預設有'\0',當strlen()遇到'\0'就會停止計算,所以個數不包括'\0'

//5 是因為sizeof()這個運算子(這裡也提一句sizeof 是運算子不是函式而且是乙個關鍵字)會計算位元組數這裡都是字元型別所以只佔5個位元組(也包括後邊的'\0')

//情況三:

#includeint main()

//對於上邊的**輸出結果是什麼

// 答案是:49 4 4

// 49 是因為這裡是字元1

//4 是因為strlen()函式在計算長度時找'\0',對於這種字串會末尾預設有'\0',當strlen()遇到'\0'就會停止計算,所以個數不包括'\0'

//4 是因為這裡的a2 是乙個指標 指標就是四個位元組 無論什麼資料型別指標在32位系統下都是4個位元組,有人會說那上一種情況中陣列名也是指標,我想說的是陣列名代表的是那片空間的位址陣列名本身就是位址,所以sizeof()可以順著這個位址計算這個空間占得位元組數,而這裡的指標本身占有四個位元組只是它的裡邊存著那個字串空間的首位址,指標自身也是個變數也有自己的位址(可以用二級指標儲存),它自己本身不是位址

//情況四:

#include#includeint main()

//答案是:49 4 10

// 我只解釋一下 10 因為陣列是一片的連續空間在定義陣列是就為它開闢了10個字元型空間

//情況五

#include#includeint main()

;//char a= //整型1111 存入char型會發生低位截斷 後邊的長度與大小與本例相同

printf("%d\n",a4[0]);

printf("%d\n",strlen(a4));

printf("%d\n",sizeof(a4));

return 0;

}//答案是:1,隨機,4

// 1 是因為int 資料1 可以存入char

//strlen()因為沒有找到'\0'或數字0 所以繼續找直至找到 所以是乙個隨機值,但是會大於等於4,因為這裡邊有四個元素呀

//情況六:

#include#includeint main()

; printf("%d\n",a4[0]);

printf("%d\n",strlen(a4));

printf("%d\n",sizeof(a4));

return 0;

}//答案是:49,隨機,4

//我只解釋 strlen()因為使用者在定義時沒有初始化'\0'或數字0 所以會繼續向後邊的空間之中找'\0'或數字0,直至找到為止,但是大於等於4

/情況七:

#include#includeint main()

;// char a5=

printf("%d\n",a5[0]);

printf("%d\n",strlen(a5));

printf("%d\n",sizeof(a5));

return 0;

}//答案是:49,4,5

//我只想說 '\0'與數字0等價在strlen()計算長度時

//情況八:

#include#includeint main()

; printf("%d\n",a6[0]);

printf("%d\n",strlen(a6));

printf("%d\n",sizeof(a6));

return 0;

}//答案是:49,4,10

//我只想說 a6[10]在初始化的時候前四個用字元初始化後邊六個用數字0預設初始化所以strlen()找到第乙個0就停了

//情況八:

#include#includeint main()

; printf("%d\n",a6[0]);

printf("%d\n",strlen(a6));

printf("%d\n",sizeof(a6));

return 0;

}//答案是:49,4,10 讀者應該十分清楚

ORACLE in 字串,字串,字串

因為傳進來的引數是 字串,字串,字串,要實現in 字串,字串,字串 select from htl price p where p.hotel id 30073328 and p.able sale date between to date 2009 03 27 yyyy mm dd and to ...

字串的統計字串

給定乙個字串,統計每乙個字母的出現次數 比如aabbccc,列印出來就是a 2 b 2 c 3 思路還是採取遍歷,注意這幾個題的思路都比較類似 要注意這裡的sstream 這裡的clear 並非清空了緩衝區,而只是重置標誌,如果要重置緩衝區,則應為ss.str include include usi...

字串 字串的旋轉

時間複雜度為o m n 空間複雜度為o 1 include include include void leftshiftone char str,int n void leftrotatestring char str,int n,int m int main 輸出 before rotate ab...