字串的輸入與賦值是非常容易搞混淆的一塊,這裡總結一下順序儲存的字串輸入方式:
一、棧內靜態儲存
1.定義時用字串賦值
char s[15]
="helloworld"
;
不能先定義,然後賦值,如:
char s[10];
s = 「helloworld」;
原因是s是指向乙個棧區陣列首元素的指標,不能給指標賦上字串。
注意!c語言中字串以字元 『\0』 結尾,所以實際上上述陣列儲存的是:h,e,l,l,o,w,o,r,l,d,\0。看到的有10個字元,實際上還加上乙個結尾 \0 表示串的終結,長度為11 。
若定義的陣列時s[10],列印出來會在helloword後新增若干亂碼,而且每次亂的都不一樣。就是因為沒讀到終結符 \0 。
2.對陣列中的字元逐個賦值
char s[15]
=;
3.使用strcpy()函式
char s[15]
;strcpy
(a,"helloworld"
);
4.從終端讀入字串
scanf:
char s[15]
;scanf
("%s"
, s)
;
這裡的s是讀入的整個一行,遇到空白字元,包括空格,製表符,換行符時會停止輸入。
gets:
char s[15]
;gets
(s);
s同樣代表一行,但是只在遇到換行符的時候停止讀入。
二、堆中動態分配
和棧中類似,宣告時有區別,其他都類似,因為不論堆還是棧,本質上還是順序儲存。
char
* s =
(char*)
malloc
(sizeof
(char)*
15);strcpy
(s,"helloworld"
);
強調一下,這裡同樣不允許這種賦值方式:
char* s = (char*)malloc(sizeof(char) * 15);
s = 「helloworld」;
因為本質上字串還是存在陣列中,s是指向陣列首元素的指標。就算是*s也是指該陣列的第乙個元素s[0]。
字串的幾種常見的反轉
提到字串的反轉,最先想到的應該是stringbuiler的reverse 的方法,方便快捷。但有時我們也需要自己寫一些反轉的 第一種 通過string類的charat 的方法來獲取字串中的每乙個字元,然後將其拼接為乙個新的字串。該方法是通過charat 方法獲得每乙個char的字元,i 0時獲得第乙...
python中幾種常見的字串
字串中的count操作可以計數字串中出現某個字元的次數,可以查詢整個字串,也可以查詢字串的某個區域 center是把字串居中,預設是填充空格,也可以填充任何字元 查詢某個或者某串字元是否在字串中,如果在則返回該字串的索引值,如果不在則返回 1,可以進行全字串查詢,也可以按區域來查詢 判斷輸入的字串是...
字串的賦值
字串表示方法 char str 20 char ch 賦值操作 1 定義的時候賦值 char str 20 what pity char ch how are you 2 用字串複製函式 strcpy str,what pity 但是對於用指標表示的字串變數用複製函式賦值會出現問題,需要先申請記憶體...