国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C語言第二十五彈---字符函數(shù)和字符串函數(shù)(上)

這篇具有很好參考價(jià)值的文章主要介紹了C語言第二十五彈---字符函數(shù)和字符串函數(shù)(上)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

?C語言第二十五彈---字符函數(shù)和字符串函數(shù)(上),C語言詳解,c語言,開發(fā)語言,算法

?個(gè)人主頁:?熬夜學(xué)編程的小林

??系列專欄:?【C語言詳解】?【數(shù)據(jù)結(jié)構(gòu)詳解】

目錄

1、字符分類函數(shù)

2、字符轉(zhuǎn)換函數(shù)

3、strlen的使用和模擬實(shí)現(xiàn)

4、strcpy 的模擬實(shí)現(xiàn)

5、strcat 的模擬實(shí)現(xiàn)

6、strcmp 的模擬實(shí)現(xiàn)

7、strncpy 函數(shù)的使用

總結(jié)


在編程的過程中,我們經(jīng)常要處理字符和字符串,為了方便操作字符和字符串,C語言標(biāo)準(zhǔn)庫中提供了 ?系列庫函數(shù),接下來我們就學(xué)習(xí)?下這些函數(shù)。

1、字符分類函數(shù)

C語言中有?系列的函數(shù)是專門做字符分類的,也就是?個(gè)字符是屬于什么類型的字符的。
這些函數(shù)的使用都需要包含?個(gè)頭文件是 ctype.h
C語言第二十五彈---字符函數(shù)和字符串函數(shù)(上),C語言詳解,c語言,開發(fā)語言,算法
int islower ( int c );
islower 是能夠判斷參數(shù)部分的 c 是否是小寫字母的。
通過返回值來說明是否是小寫字母, 如果是小寫字母就返回非0的整數(shù),如果不是小寫字母,則返回0。
上述函數(shù)比較簡單,uu們自行驗(yàn)證啦,最好通過查庫函數(shù)的相關(guān)知識(shí)驗(yàn)證喔~
練習(xí):
寫?個(gè)代碼,將字符串中的小寫字母轉(zhuǎn)大寫,其他字符不變。
#include <stdio.h>
#include <ctype.h>//判斷字符函數(shù)的頭文件
int main ()
{
 int i = 0;
 char str[] = "Test String.\n";
 char c;
 while (str[i])
 {
 c = str[i];
 if (islower(c)) //如果是小寫字母則執(zhí)行
 c -= 32;//大小寫之間ASCII碼值間隔32,也可以通過兩個(gè)字符相減,即'a'-'A';
 
 putchar(c);//輸出該字符
 i++;
 }
 return 0;
}

2、字符轉(zhuǎn)換函數(shù)

C語言提供了2個(gè)字符轉(zhuǎn)換函數(shù):
int tolower ( int c ); //將參數(shù)傳進(jìn)去的?寫字?轉(zhuǎn)?寫 
int toupper ( int c ); //將參數(shù)傳進(jìn)去的?寫字?轉(zhuǎn)?寫
上面的代碼,我們將小寫轉(zhuǎn)大寫,是 -32 完成的效果,有了轉(zhuǎn)換函數(shù),就可以直接使用? tolower
數(shù)。
#include <stdio.h>
#include <ctype.h>
int main ()
{
 int i = 0;
 char str[] = "Test String.\n";
 char c;
 while (str[i])
 {
 c = str[i];//將該字符放在臨時(shí)變量中
 if (islower(c)) //是小寫字母則轉(zhuǎn)換
 c = toupper(c);
 putchar(c);//輸出字符
 i++;
 }
 return 0;
}

3、strlen的使用和模擬實(shí)現(xiàn)

注:在模擬實(shí)現(xiàn)函數(shù)時(shí),盡可能的將以下五個(gè)點(diǎn)都考慮到。

1.參數(shù)順序

2.const修飾指針(防止指針被修改)
3.函數(shù)的功能,停止條件

4.assert(對(duì)空指針進(jìn)行判斷)
5.函數(shù)返回值

size_t strlen ( const char * str );
? 字符串以 '\0' 作為結(jié)束標(biāo)志,strlen函數(shù)返回的是在字符串中 '\0' 前面出現(xiàn)的字符個(gè)數(shù)(不包含 '\0' )。
? 參數(shù)指向的字符串必須要以 '\0' 結(jié)束。
? 注意函數(shù)的返回值為size_t,是無符號(hào)的( 易錯(cuò) )
? strlen的使用需要包含頭文件
? 學(xué)會(huì)strlen函數(shù)的模擬實(shí)現(xiàn)
#include <stdio.h>
#include <string.h>//strlen函數(shù)需包含的頭文件
int main()
{
 const char* str1 = "abcdef";
 const char* str2 = "bbb";
 if(strlen(str2)-strlen(str1)>0)
 {
 printf("str2>str1\n");
 } 
 else
 {
 printf("srt1>str2\n");
 }
 return 0;
}
strlen的模擬實(shí)現(xiàn):
方式1:
strlen計(jì)算的是傳入的指針到'\0'之間個(gè)數(shù),我們第一想到的肯定是通過遍歷該數(shù)組,計(jì)算字符串長度,然后根據(jù)上面注意的五個(gè)點(diǎn),一步一步進(jìn)行實(shí)現(xiàn)。
首先參數(shù)順序,只有一個(gè)參數(shù)不需要管順序。
第二個(gè)const修飾指針,此處只需遍歷數(shù)組不會(huì)修改字符,因此可以用const修飾指針。
第三個(gè)函數(shù)功能是計(jì)算字符串長度,'\0'之前的長度。
第四個(gè)assert斷言,傳參是指針,所以有可能是空指針,此處可以進(jìn)行斷言,空指針則報(bào)錯(cuò)。
第五個(gè)返回值位無符號(hào)整數(shù),C語言提供無符號(hào)整數(shù)類型size_t,此處用int影響也不會(huì)很大,只是用size_t更加標(biāo)準(zhǔn)準(zhǔn)確。
//計(jì)數(shù)器方式
size_t my_strlen(const char * str)
{
 int count = 0;
 assert(str);//空指針則報(bào)錯(cuò)
 while(*str)//遍歷字符串,遇到'\0'則結(jié)束循環(huán)
 {
 count++;
 str++;
 }
 return count;//返回大小
}
方式2:
遞歸實(shí)現(xiàn),長度=1+strlen(str+1),字符串長度=該字符+后面字符串的長度。
//不能創(chuàng)建臨時(shí)變量計(jì)數(shù)器
size_t my_strlen(const char * str)
{
 assert(str);//空指針則報(bào)錯(cuò)
 if(*str == '\0')
 return 0;
 else
 return 1+my_strlen(str+1);
}
方式3:
根據(jù)前面指針知識(shí)所學(xué),指針-指針=相差元素個(gè)數(shù),因此字符串長度可以通過指針-指針計(jì)算。
//指針-指針的?式
size_t my_strlen(const char *s)
{
 assert(str);
 char *p = s;
 while(*p != ‘\0’ )
 p++;
 return p-s;
}

4、strcpy 的模擬實(shí)現(xiàn)

 char* strcpy(char * destination, const char * source );
? Copies the C string pointed by source into the array pointed by destination, including the
terminating null character (and stopping at that point).
將 source 指向的 C 字符串復(fù)制到目標(biāo)指向的數(shù)組中,包括終止 null 字符(并在該點(diǎn)停止)。
? 源字符串必須以 '\0' 結(jié)束。
? 會(huì)將源字符串中的 '\0' 拷貝到目標(biāo)空間。
? 目標(biāo)空間 必須足夠大,以確保能存放源字符串。
? 目標(biāo)空間必須可修改。
? 學(xué)會(huì)模擬實(shí)現(xiàn)。
strcpy的模擬實(shí)現(xiàn):
//1.參數(shù)順序 第一個(gè)為目標(biāo)字符串,第二個(gè)為原來字符串
//2.const修飾指針 目標(biāo)需要修改,原來不需要修改
//3.函數(shù)的功能,停?條件
//4.assert 兩個(gè)均不能為空指針
//5.函數(shù)返回值 返回目標(biāo)字符串首地址
//6.題?出?《?質(zhì)量C/C++編程》書籍最后的試題部分
char *my_strcpy(char *dest, const char*src)
{ 
 char *ret = dest;
 assert(dest != NULL);//為真則不報(bào)錯(cuò)
 assert(src != NULL);//為真則不報(bào)錯(cuò)
 
 
 while((*dest++ = *src++))
 {
 ;
 }
 return ret;
}

5、strcat 的模擬實(shí)現(xiàn)

? Appends a copy of the source string to the destination string. The terminating null character in destination is overwritten by the first character of source, and a null-character is included at the end of the new string formed by the concatenation of both in destination.
將源字符串的副本追加到目標(biāo)字符串。destination 中的終止 null 字符被 source 的第一個(gè)字符覆蓋,并且在 destination 中由兩者串聯(lián)形成的新字符串的末尾包含一個(gè) null 字符。
? 源字符串必須以 '\0' 結(jié)束。
? 目標(biāo)字符 串中也得有 ' \0'? ,否則沒辦法知道追加從哪里開始。
? 目標(biāo) 空間必須有足夠的大,能容納下源字符串的內(nèi)容。
? 目標(biāo) 空間必須可修改。
? 字符串自己給自己追加,如何?
模擬實(shí)現(xiàn)strcat函數(shù):
char *my_strcat(char *dest, const char*src)
{
 char *ret = dest;
 assert(dest != NULL);
 assert(src != NULL);
 while(*dest)
 {
 dest++;
 }
 while((*dest++ = *src++))
 {
 ;
 }
 return ret;
}

6、strcmp 的模擬實(shí)現(xiàn)

? This function starts comparing the first character of each string. If they are equal to each
other, it continues with the following pairs until the characters differ or until a terminating
null-character is reached.
此函數(shù)開始比較每個(gè)字符串的第一個(gè)字符。如果它們相等,則繼續(xù)往下比較,直到字符不同或終止達(dá)到 null-character。
? 標(biāo)準(zhǔn)規(guī)定:
? 第?個(gè)字符串大于第?個(gè)字符串,則返回大于0的數(shù)字
? 第?個(gè)字符串等于第?個(gè)字符串,則返回0
? 第?個(gè)字符串小于第?個(gè)字符串,則返回小于0的數(shù)字
? 那么如何判斷兩個(gè)字符串? 比較兩個(gè)字符串中對(duì)應(yīng)位置上字符ASCII碼值的大小。
strcmp函數(shù)的模擬實(shí)現(xiàn):
int my_strcmp (const char * str1, const char * str2)
{
 int ret = 0 ;
 assert(src != NULL);
 assert(dest != NULL);
 while(*str1 == *str2)
 {
 if(*str1 == '\0')//兩個(gè)字符串相等且遇到'\0'即字符串相等,返回0
 return 0;
 str1++;
 str2++;
 }
 return *str1-*str2;//不相等返回差值,>0即str1大,<0即str2大
}

7、strncpy 函數(shù)的使用

?
char * strncpy ( char * destination, const char * source, size_t num );
? Copies the first num characters of source to destination. If the end of the source C string
(which is signaled by a null-character) is found before num characters have been copied,
destination is padded with zeros until a total of num characters have been written to it.
將源的前 num 個(gè)字符復(fù)制到目標(biāo)。如果源 C 字符串的末尾(由 null 字符表示)在復(fù)制 num 個(gè)字符之前找到,destination 用零填充,直到總共寫入了 num 個(gè)字符。
? 拷貝num個(gè)字符從源字符串到目標(biāo)空間。
? 如果源字符串的長度小于num,則拷貝完源字符串之后,在目標(biāo)的后邊追加0,直到num個(gè)。
#include <stdio.h>
#include <string.h>//strncpy函數(shù)需包含的頭文件
int main()
{
  char str1[]="abcdeef";
  char str2[20]={0};
  strncpy(str2,str1,5);
  printf("%s\n",str2);
  return 0;
}
C語言第二十五彈---字符函數(shù)和字符串函數(shù)(上),C語言詳解,c語言,開發(fā)語言,算法

總結(jié)


本篇博客就結(jié)束啦,謝謝大家的觀看,如果公主少年們有好的建議可以留言喔,謝謝大家啦!文章來源地址http://www.zghlxwxcb.cn/news/detail-826768.html

到了這里,關(guān)于C語言第二十五彈---字符函數(shù)和字符串函數(shù)(上)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • JavaScript從入門到精通系列第二十八篇:詳解JavaScript中的字符串的方法

    JavaScript從入門到精通系列第二十八篇:詳解JavaScript中的字符串的方法

    ? 文章目錄 前言 一:String中的方法 1:獲取字符串的長度 2:返回指定位置的字符 3:返回指定位置的字符Unicode編碼 4:返回指定位置的字符Unicode編碼 ?二:比較常用的 1:連接兩個(gè)字符串 2:檢索一個(gè)字符串中指定內(nèi)容? 3:從后檢索一個(gè)字符串中指定內(nèi)容? ?4:截取字符串

    2024年02月06日
    瀏覽(26)
  • C語言:字符函數(shù)和字符串函數(shù)(一篇拿捏字符串函數(shù)!)

    C語言:字符函數(shù)和字符串函數(shù)(一篇拿捏字符串函數(shù)!)

    目錄 求字符串長度: 1. strlen(字符串長度) 長度不受限制函數(shù): 2. strcpy(字符串拷貝) 3. strcat(字符串追加) 4. strcmp(字符串比較) 長度受限制函數(shù): 5. strncpy(字符串拷貝) 6. strncat(字符串追加) 7. strncmp(字符串比較) 字符串查找: 8. strstr(查找字符串子串) 9. strtok(字符串分割) 錯(cuò)誤信

    2024年02月10日
    瀏覽(95)
  • 【C語言】字符函數(shù),字符串函數(shù),內(nèi)存函數(shù)

    【C語言】字符函數(shù),字符串函數(shù),內(nèi)存函數(shù)

    大家好!今天我們來學(xué)習(xí)C語言中的字符函數(shù),字符串函數(shù)和內(nèi)存函數(shù)。 目錄 1. 字符函數(shù) 1.1 字符分類函數(shù) 1.2 字符轉(zhuǎn)換函數(shù) 1.2.1 tolower(將大寫字母轉(zhuǎn)化為小寫字母) 1.2.2 toupper(將小寫字母轉(zhuǎn)化為大寫字母) 2. 字符串函數(shù) 2.1 字符串輸入函數(shù) 2.1.1 gets() ?2.1.2 fgets() 2.2 字符串

    2024年02月10日
    瀏覽(27)
  • C語言 - 字符函數(shù)和字符串函數(shù)

    C語言 - 字符函數(shù)和字符串函數(shù)

    目的:學(xué)習(xí)主要常見字符串和字符串函數(shù),及其部分函數(shù)的模擬過程。 C語?中有?系列的函數(shù)是專?做字符分類的,也就是?個(gè)字符是屬于什么類型的字符的。 這些函數(shù)的使?都需要包含?個(gè)頭?件是 ctype.h。 這些函數(shù)的使??法?常類似,我們就講解?個(gè)函數(shù)的事情,其

    2024年02月05日
    瀏覽(25)
  • C語言—字符函數(shù)和字符串函數(shù)

    C語言—字符函數(shù)和字符串函數(shù)

    C語言中對(duì)字符和字符串的處理很是頻繁,但是C語言本身是沒有字符串類型的,字符串通常放在 常量字符串中或者字符數(shù)組中。字符串常量適用于那些對(duì)它不做修改的字符串函數(shù)。 strlen函數(shù)的介紹 strlen函數(shù)用于求字符串的長度 注: 字符串已經(jīng) ‘\\0’ 作為結(jié)束標(biāo)志,strlen函

    2024年02月07日
    瀏覽(21)
  • C語言:字符函數(shù)和字符串函數(shù)

    C語言:字符函數(shù)和字符串函數(shù)

    C語言:初識(shí)C語言 C語言:分支語句和循環(huán)語句 C語言:函數(shù) C語言:數(shù)組 C語言:操作符詳解 C語言:指針詳解 C語言:結(jié)構(gòu)體 C語言:數(shù)據(jù)的存儲(chǔ) 今天來盤一下字符函數(shù)和字符串函數(shù)。 C語言中對(duì)字符和字符串的處理很是頻繁,但是C語言本身是沒有字符串類型的,字符串通常

    2024年02月11日
    瀏覽(27)
  • 【C語言】字符函數(shù)和字符串函數(shù)

    【C語言】字符函數(shù)和字符串函數(shù)

    ? 目錄 1.求字符串長度strlen 2.長度不受限制的字符串函數(shù) 字符串拷貝strcpy 字符串追加strcat 字符串比較strcmp 3.長度受限制的字符串函數(shù)介紹strncpy strncat ?編輯strncmp 4.字符串查找strstr 5.字符串分割strtok 6.錯(cuò)誤信息報(bào)告 strerror perror 7.字符分類函數(shù) 8.字符轉(zhuǎn)換函數(shù) ?9.內(nèi)存操作函

    2024年02月12日
    瀏覽(35)
  • C語言——字符函數(shù)和字符串函數(shù)

    C語言——字符函數(shù)和字符串函數(shù)

    assert.h 頭文件定義了宏assert(),?于在運(yùn)?時(shí)確保程序符合指定條件,如果不符合,就報(bào) 錯(cuò)終?運(yùn)?。這個(gè)宏常常被稱為 “斷?” 。 assert() 宏接受?個(gè)表達(dá)式作為參數(shù)。如果該表達(dá)式為真(返回值?零), assert() 不會(huì)產(chǎn)?任何作?,程序繼續(xù)運(yùn)?。如果該表達(dá)式為假(

    2024年04月25日
    瀏覽(22)
  • C語言字符函數(shù)和字符串函數(shù)詳解

    C語言字符函數(shù)和字符串函數(shù)詳解

    ? ? ? ?Hello, 大家好,我是一代,今天給大家?guī)碛嘘P(guān)字符函數(shù)和字符串函數(shù)的有關(guān)知識(shí) ? ? ? ?所屬專欄:C語言 ? ? ? ?創(chuàng)作不易,望得到各位佬們的互三呦 在C語言中有一些函數(shù)是專門為字符設(shè)計(jì)的,這些函數(shù)的使用都需要包含一個(gè)頭文件ctype.h 如:(注:以下函數(shù)原型都

    2024年03月20日
    瀏覽(33)
  • C語言——字符函數(shù)和字符串函數(shù)(一)

    C語言——字符函數(shù)和字符串函數(shù)(一)

    ??前言: 這篇文章對(duì)我最近學(xué)習(xí)的有關(guān) 字符串的函數(shù) 做一個(gè)總結(jié)和整理,主要講解 字符函數(shù)和字符串函數(shù)(strlen,strcpy和strncpy,strcat和strncat)的使用方法,使用場景和一些注意事項(xiàng) (附上實(shí)例) ??個(gè)人簡介:努力學(xué)習(xí)ing ??個(gè)人專欄:C語言入門基礎(chǔ) ??CSDN主頁 愚潤求

    2024年02月04日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包