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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

C语言中的字符串处理

發布時間:2023/11/27 生活经验 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言中的字符串处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

?

?字符串字面量(字符串常量,在C標準中稱為,字符串字面量)

如何存儲字符串字面量
  從本質上而言,C語言把字符串字面量作為字符數組來處理。當C語言編譯器在程序中遇到長度為n的字符串字面量時,它會為字符串字面量分配長度為n+1的內存空間,在末尾增加一個額外的字符——空字符(\0)。

字符串字面量的操作
  通常情況下可以在任何C語言允許使用 char * 指針的地方使用字符串字面量。如:

char *p;p = "abc";這個賦值操作不是復制 "abc" 中的字符,而僅僅是使 p 指向字符串的第一個字符。


?字符串變量
  一些編程語言為聲明字符串提供了特殊的 string 類型。C語言采取了不同的方式:只要保證字符串是以空字符串結尾的,任何一維的字符數組都可以用來存儲字符串。如果編寫自己的字符串處理函數,請千萬注意要正確地處理空字符。
  假設需要變量用來存儲最多80個字符的字符串。既然字符串會在末尾處需要空字符,那么要聲明的變量是含有81個字符的數組。

#define STR_LEN 80/* 慣用法 */char str[STR_LEN + 1];對宏加一的這種方法是C程序員常用的方式。

初始化字符串變量
char date1[8] = "June 14";date1: | J | u |? n | e |?? | 1 | 4 | \0 |


char date2[9] = "June 14";date2: | J | u |? n | e |?? | 1 | 4 | \0 | \0 |
大體上來說,這種行為與C語言處理數組初始化的方法一致。
字符串變量的聲明可以忽略它的長度。這種情況下,編譯器會自動計算長度:

char date3[] = "June 14";編譯器為date3分配8個字符的空間。
?
字符數組與字符指針
一起來比較一下下面兩個聲明:

char date[] = "June 14";它聲明date是個字符數組。和這個聲明相似的是下面這個聲明:

char *date = "June 14";它聲明date是個指向字符串字面量的指針。
[注意],不能錯誤地認為上面兩種date可以互換。兩者之間有著顯著的差異:
(1) 在聲明為數組時,就像任意數組元素一樣,可以修改存儲在date中的字符。在聲明為指針時,date指向字符串字面量。
(2) 在聲明為數組時,date是數組名。在聲明為指針時,date是變量,這個變量可以在程序執行期間指向其他字符串。
  如果需要可以修改的字符串,那么就要建立字符數組來存儲字符串。這時聲明指針變量是不夠的。下面的聲明使編譯器為指針變量分配了足夠的內存空間:

char *p;可惜的是,它不為字符串分配空間。在使用p作為字符串之前,必須把p指向字符串數組。一種可能是把p指向已經存在的字符串變量:

char str[STR_LEN + 1], *p;p = str;

現在p指向了str的第一個字符,所以可以把p作為字符串使用了。

?

?

字符串的讀寫

?


  用 printf 函數和 puts 函數寫字符串


  %s 允許 printf 函數寫字符串。如:

char str[] = "Are we having fun yet?";printf("Value of str: %s\n", str);如果只顯示字符串的一部分,可以用 %.ps。這里的 p 是要顯示的字符數量。語句

printf("%.6s\n", str);會顯示出

Are we  C函數庫還提供puts函數。

puts(str);  

   用 scanf 函數和 gets 函數讀字符串

  在 scanf 函數調用中,不需要在 str 前添加運算符 &。因為 str 是數組名,編譯器會自動把它當作指針來處理。調用時,scanf 函數會跳過空白字符,然后讀入字符,并且把讀入的字符存儲到 str 中,知道遇到空白字符為止。scanf 函數始終會在字符串末尾存儲一個空字符。用 scanf 函數讀入字符串永遠不會包含空白字符。因此,scanf 函數通常不會讀入一整行輸入。換行符會使 scanf 函數停止讀入,空格符或制表符也會產生同樣的效果。可以參考下面的例子:

int read_line(char strp[], int n){    char ch;    int i = 0;    while((ch = getchar()) != '\n')        if(i < n)            str[i++] = ch;    str[i] = '\0';    /* terminates string */    return i;         /* number of characters stored */}



?

運行結果如下:


Input a string:this is a stringString is:this為了每次讀入一整行輸入,可以使用 gets 函數。類似于 scanf 函數,gets 函數把讀入的字符放到數組中,然后存儲一個空字符。然而,在其他方面 gets 函數有些不同于 scanf 函數:

  (1) gets 函數不會在開始讀字符串之前跳過空白字符( scanf 函數會跳過)。

  (2) gets 函數會持續讀入直到找到換行符才停止(scanf 函數會在任意空白字符處停止)。

  此外,gets 函數會忽略掉換行符,而不會把它存儲到數組中,用空字符代替換行符。

?

  逐個字符讀字符串

  因為 scanf 函數和 gets 函數都有風險且不夠靈活,C 程序員經常會編寫自己的輸入函數。通過每次一個字符的方式來讀入字符串。下面是自己編寫的讀取字符串的函數 read_line():


?
int read_line(char strp[], int n){??? char ch;??? int i = 0;??? while((ch = getchar()) != '\n')??????? if(i < n)??????????? str[i++] = ch;??? str[i] = '\0';??? /* terminates string */??? return i;???????? /* number of characters stored */}返回之前,read_line 函數在字符串的末尾放置了一個空字符。就像 scanf 函數和 gets 函數一樣,標準函數會自動在輸入字符串的末尾放置一個空字符串。然而,如果自己寫輸入函數,必須要考慮到這一點。

?

?

總結

以上是生活随笔為你收集整理的C语言中的字符串处理的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 午夜18视频在线观看 | 中文字幕日韩欧美在线 | 黄色综合| 第一av在线 | 亚洲免费观看av | 午夜福利123 | 久久传媒 | 国内自拍偷拍视频 | 免费看一级黄色大片 | 国产一区二区三区欧美 | 一区二区精品视频在线观看 | 国产精品久久久久久久裸模 | 欧美在线视频一区二区 | 一区二区三区在线不卡 | 国产av不卡一区 | 欧美一级二级三级视频 | 四虎色播 | 欧美激情免费看 | 农村少妇| 黄色av网站网址 | 伊人国产在线观看 | 久久国产99 | 日韩福利片在线观看 | 丝袜老师扒开让我了一夜漫画 | 99久在线精品99re8热 | 中文人妻熟妇乱又伦精品 | 午夜激情视频在线播放 | 亚洲欧美一区二区三区久久 | 国产欧美日韩综合精品一区二区 | 四虎在线免费观看视频 | www好男人 | 午夜8888| 亚洲咪咪| 亚洲国产第一 | 99免费在线视频 | 激情视频激情小说 | 国产吧在线 | 国产日产精品一区 | 涩涩视频在线观看免费 | 久久精品成人一区二区三区蜜臀 | 中国女人性猛交 | 性欧美最猛 | 日本在线h | 久久久精品毛片 | 91极品身材尤物theporn | 无码h肉动漫在线观看 | 污污小视频 | 国产黄片一区二区三区 | 天堂资源中文 | 手机在线观看毛片 | 国产高清不卡视频 | 色91在线| 成人观看网站 | 久久精品国产亚洲AV无码麻豆 | 欧日韩一区二区三区 | 你懂的在线观看网站 | 欧美精品一二区 | 加勒比精品 | 亚洲 激情 | 在线观看亚洲精品 | 日本精品一区二区视频 | 日韩欧美在线第一页 | av动漫网站| 国产91在线高潮白浆在线观看 | 国产伦精品一区二区三区视频孕妇 | free黑人多人性派对hd | 一级黄色性片 | 波多野结衣视频在线观看 | 丁香免费视频 | 黄色1级视频 | 亚洲久久久久久 | 日本a大片| 香蕉视频在线观看网站 | av不卡高清 | 欧美日韩成人一区二区在线观看 | www夜插内射视频网站 | 一二三区在线 | 成年人免费看毛片 | 嫩草私人影院 | 国产综合久久久久久鬼色 | 91视频免费观看网站 | 色婷婷亚洲一区二区三区 | 久久99热这里只频精品6学生 | 色婷婷av一区二区三区大白胸 | 噜噜噜噜私人影院 | 99r精品视频 | 日韩精品啪啪 | 女同在线观看 | 亚洲第一色在线 | 男女搞黄网站 | 免费福利视频网站 | 黄色录像片子 | 红桃视频一区二区三区免费 | 国产美女黄色 | 深夜福利免费观看 | 96久久| 亚洲在线a | 懂色一区二区 | 欧美一级淫片007 |