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

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

這篇具有很好參考價值的文章主要介紹了C語言字符函數(shù)和字符串函數(shù)詳解。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

C語言字符函數(shù)和字符串函數(shù)詳解,C語言,c語言,開發(fā)語言

? ? ? ?Hello, 大家好,我是一代,今天給大家?guī)碛嘘P字符函數(shù)和字符串函數(shù)的有關知識

? ? ? ?所屬專欄:C語言

? ? ? ?創(chuàng)作不易,望得到各位佬們的互三呦

一.字符函數(shù)

在C語言中有一些函數(shù)是專門為字符設計的,這些函數(shù)的使用都需要包含一個頭文件<ctype.h>

如:(注:以下函數(shù)原型都很相似,都為int 函數(shù)(int 字符))

函數(shù)

iscntrl? ? ? ? ? ? ? ? ? ? ? ?檢查字符是否為可控制字符

isspace? ? ? ? ? ? ? ? ? ??檢查字符是否為一個空格、制表符、換行,換頁’\f‘或回車

isdigit? ? ? ? ? ? ? ? ? ? ? ?檢查字符是否為數(shù)字’0‘-’9‘

isxdigit? ? ? ? ? ? ? ? ? ? ?檢查字符是否為16進制的字符包括所有10進制數(shù)字,小寫字母,a-f,大? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 寫字符A-F

islower? ? ? ? ? ? ? ? ? ? ?檢查字符是否為小寫字母

isupper? ? ? ? ? ? ? ? ? ? 檢查字符是否為大寫字母

isalpha? ? ? ? ? ? ? ? ? ? ?檢查字符是否為可打印字符

isalnum? ? ? ? ? ? ? ? ? ??檢查字符是否為字母或十進制數(shù)字

ispunct? ? ? ? ? ? ? ? ? ? ?檢查字符是否為可打印標點字符(不屬于數(shù)字和字母的圖形字符)

isgraph? ? ? ? ? ? ? ? ? ? ?檢查字符是否為可打印字符(不包括空格)

isprint? ? ? ? ? ? ? ? ? ? ? ?檢查字符是否為可打印字符(包括空格)

以上函數(shù)當條件滿足時的返回值都為非0的整數(shù)

如: islower(c),如果c是小寫字母,返回非零整數(shù),不是小寫字母就返回0

#include<stdio.h>
#include<ctype.h>
int main()
{
	printf("%d", islower('b'));
}

C語言字符函數(shù)和字符串函數(shù)詳解,C語言,c語言,開發(fā)語言

二.字符轉換函數(shù)

C語言提供了兩種字符轉換函數(shù)

1.int tolower(int c)? ? 將傳進去的大寫字母轉換為小寫

2.?int upper(int c)? ? 將傳進去的小寫字母轉換為大寫

如:

#include<stdio.h>
#include<ctype.h>
int main()
{
	printf("%c", tolower('A'));//將大寫字母轉小寫,如果不為大寫字母則不改變
}

?三.字符串函數(shù)及字符串模擬

這里字符串函數(shù)包含的頭文件都為string.h

一.strlen函數(shù)

函數(shù)原型:size_t strlen (const char*str)

頭文件:string.h

功能:計算字符串長度(字符串以‘\0’為結束標志,strlen函數(shù)返回的是在字符串中‘\0’前面面出現(xiàn)的字符個數(shù))

注意:1.參數(shù)指向的字符串必須以'\0'為結束標志,否則不知道字符串在哪里結束,返回隨機值

2.函數(shù)的返回值為size_t , 是無符號的(下面會舉相關例題)

就strlen的返回值有一個例題:

#include<stdio.h>
#include<string.h>
int main()
{
	const char* str1 = "acbdh";
	const char* str2 = "ads";
	if (strlen(str2) - strlen(str1) > 0)
	{
		printf(">");
	}
	else
	{
		printf("<");
	}
	return 0;
}

這里很多人會認為輸出的是<,但實際輸出的是>,為什么呢?其實是以為strlen的返回值為size_t,其表示的數(shù)都為無符號數(shù),也就是表示的為正數(shù),比如-1,因為返回類型為size_t,其最高位的符號為表示的就為2的32次方,而不是表示正負號。

strlen函數(shù)模擬實現(xiàn)

方法1:指針減指針,指針減指針表示的是兩個指針之間相差的元素個數(shù)

?
#include<stdio.h>
#include<assert.h>
size_t my_strlen(char*str)
{
	assert(str);//防止str為空指針,包含頭文件為assert.h
	char* p = str;
	while (*str != '\0')
	{
		str++;
	}
	return str - p;
}
int main()
{
	const char* str1 = "acbdh";
	printf("%zd", my_strlen(str1));
	return 0;
}

?

?方法2:計數(shù)器方式,用count記錄元素個數(shù)

#include<stdio.h>
#include<assert.h>
size_t my_strlen(const char* str)
{
	assert(str);//防止str為空指針,包含頭文件為assert.h
	int count = 0;
	while (*str != '\0')
	{
		str++;
		count++;
	}
	return count;
}
int main()
{
	const char* str1 = "acbdh";
	printf("%zd", my_strlen(str1));
	return 0;
}

方法3:遞歸方式

#include<stdio.h>
#include<assert.h>
size_t my_strlen(const char* str)
{
	assert(str);//防止str為空指針,包含頭文件為assert.h
	if (*str == '\0')
		return 0;
	return my_strlen(str + 1) + 1;
}
int main()
{
	const char* str1 = "acbdh";
	printf("%zd", my_strlen(str1));
	return 0;
}

二.strcpy函數(shù)

函數(shù)原型:char* strcpy(char* destination ,const char* source)

功能:把源字符串復制到目標字符串

注意:1.源字符必須以‘\0’結束

2.會將源字符串的‘\0’拷貝到目標空間

3.目標空間足夠大,以確保能夠存放源字符串

4.目標空間必須可修改

strcpy的模擬實現(xiàn)

?
#include<stdio.h>
#include<assert.h>
char* my_strcpy(char* str1, char* str2)
{
	assert(str1 && str2);
	char* s = str1;
	while (*str1++ = *str2++);//先解引用在++
	return s;
}
int main()
{
	char str1[] = "acbdh";
	char* str2 = "acb";
	printf("%s", my_strcpy(str1,str2));
	return 0;
}

?

三.strcat函數(shù)

函數(shù)原型:char* strcat(char*dest,const char*str)

功能:將兩個字符串拼接起來,將str拼接到dest上

注意:1.源字符串必須以'\0'結束

2.目標字符串中也得有‘\0’,否則沒辦法知道從哪里開始拼接

3.目標空間足夠大,能容納下源字符的內容

4.目標空間必須可修改

strcat模擬實現(xiàn)

#include<stdio.h>
#include<assert.h>
char* my_strcat(char* str1,const char*str2)
{
	assert(str1&&str2);//防止str為空指針,包含頭文件為assert.h
	char* s = str1;
	while(*str1)
	{
		str1++;
	}
	while (*str1++ = *str2++);//當*str2為'\0'時表達式結果為假
	return s;

}
int main()
{
	char str1[20] = "acbdh";
	const char* str2 = "sad";
	printf("%s", my_strcat(str1,str2));
	return 0;
}

四.strcmp函數(shù)

函數(shù)原型:int strcmp(char*str1,char*str2)

功能:比較兩個字符串的大小,若第一個字符串大于第二個字符串,則返回大于0的數(shù)字

第一個字符串小于第二個字符串,則返回小于0的數(shù)字

第一個字符串等于第二個字符串,則返回0

注意:比較兩個字符串大小是用ascii值比較,一個一個字符比較

strcmp函數(shù)模擬

#include<stdio.h>
#include<assert.h>
int  my_strcmp(char* str1,const char*str2)
{
	assert(str1&&str2);//防止str為空指針,包含頭文件為assert.h
	while (*str1 == *str2)
	{
		if (*str1 == '\0')//代表*str1和*str2都為'\0'
			return 0;
		str1++;
		str2++;
	}
	return *str1 - *str2;
}
int main()
{
	const char *str1 = "acbdh";
	const char* str2 = "sad";
	printf("%d", my_strcmp(str1,str2));
	return 0;
}

?五.strncpy函數(shù)

函數(shù)原型:char* strncpy(char* destination,char *source,size_t num)

功能:拷貝num個字符從源字符串到目標空間

注意:如果源字符串的長度小于num,則拷貝完源字符后,到目標空間的后邊追加'\0',直至num個

strncpy函數(shù)模擬

#include <stdio.h>
#include <string.h>
#include<assert.h>
char* my_strncpy(char* str1, const char* str2, size_t n)
{
	assert(str1 && str2);
	char* s = str1;
	for(int i=0;i<n && str2!='\0';i++)
	{
		*str1++ = *str2++;
	}
	*str1 = '\0';
	return s;
}
int main()
{
	char str1[20]="name ";
	char str2[20]="str";
	printf("%s", my_strncpy(str1, str2, 1));
}

六.strncat函數(shù)

函數(shù)原型:char*strncat(char* destination ,const char*source ,size_t num)

功能 :將source指向字符串的前num個字符追加到destination指向的字符串末尾,再追加?個 \0 字符

注意:如果source 指向的字符串的長度小于num的時候,只會將字符串中到'\0'的內容追加到destination指向的字符串末尾

strncat模擬

#include<stdio.h>
#include<assert.h>
char* my_strncat(char* dest, char* str, size_t n)
{
	assert(dest && str);
	int i;
	char* s = dest;
	while (*dest != '\0')
	{
		dest++;
	}
	for (i = 0; i < n && str[i] != '\0'; i++)
	{
		dest[i] = str[i];
	}
	dest[i] = '\0';
	return s;
}
int main()
{
	char str[] = { "abcd" };
	char dest[20] = { "mnkj***\0***" };
	char* ret = my_strncat(dest, str, 2);
	printf("%s", ret);
}

七.strncmp函數(shù)

函數(shù)原型:(const char*str1, const char*str2,size_t num)

功能: 比較str1和str2的前num個字符,如果相等就繼續(xù)往后?較,最多比較num個字?,如果提前發(fā)現(xiàn)不一樣,就提前結束。如果num個字符都相等,就是相等返回0,如果str字符串<str2字符串,就返回小于0的數(shù),反之,返回大于0的數(shù)

strncmp函數(shù)模擬

#include<stdio.h>
#include<assert.h>
int  my_strncmp(const char* str1, const char* str2,size_t num)
{

	assert(str1 && str2);//防止str為空指針,包含頭文件為assert.h
	while (*str1 == *str2&& num--)
	{
		if (*str1 == '\0')//代表*str1和*str2都為'\0'
			return 0;
		str1++;
		str2++;
	}
	if (num == 0)
	{
		return 0;
	}
	return *str1 - *str2;
}
int main()
{
	const char* str1 = "afbdh";
	const char* str2 = "afbh";
	printf("%d", my_strncmp(str1, str2, 9));
	return 0;
}

八.strstr函數(shù)

函數(shù)原型:char* strstr(const char *str1,const char*str2)

功能:?返回字符串str2在字符串str1中第?次出現(xiàn)的位置

strstr函數(shù)模擬

#include<stdio.h>
#include<assert.h>
char* my_strstr(const char* str1, const char* str2)
{
	assert(str1 && str2);
	const char* p1 = NULL;
	const char* p2 = NULL;
	const char* cur = str1;
	if (*str2 == '\0')
		return str1;
	while (*cur)
	{
		p1 = cur;//記錄str1開始的起始位置
		p2 = str2;//記錄str2的位置
		while (*p1 == *p2 && *p1 != '\0' && *p2 != '\0')
		{
			p1++;
			p2++;
		}
		if (p2 == '\0')
		{
			return (char*)cur;//將const char*強轉
		}
		if (*p1 == '\0')
		{
			return NULL;
		}
		cur++;//起始位置不可以,刷新起始位置
	}
	return NULL;

}
int main()
{
	char a[] = { "abbbcde" };
	char b[] = { "bc" };
	printf("%s", my_strstr(a, b));
}

?九.strtok函數(shù)

函數(shù)原型:char* strtok(char*str1, const char*str2)

功能: 將str1進行分割,str2中包含分割符(第?個參數(shù)指定?個字符串,它包含了0個或者多個由str2字符串中?個或者多個分隔符分割的標記)

注意:1.strtok函數(shù)找到str1中出現(xiàn)的分割符,將其標記,并將其之前的字符串? \0 結尾,返回?個指向這個標記的指針,下次用的時候第一個參數(shù)為NULL。(注: strtok函數(shù)會改變被操作的字符串,所以在使?strtok函數(shù)切分的字符串?般都是臨時拷貝的內容 并且可修改。)

2.strtok函數(shù)的第?個參數(shù)不為 NULL ,函數(shù)將找到str中第?個標記,strtok函數(shù)將保存它在字符串中的位置。

3.strtok函數(shù)的第?個參數(shù)為 NULL ,函數(shù)將在同?個字符串中被保存的位置開始,查找下?個標記。

4.如果字符串中不存在更多的標記,則返回 NULL 指針。

strstr使用示例

#include<stdio.h>
#include<string.h>
int main()
{
	char a[] = { "zhju.sj@sj" };
	char* sep = ".@";
	char* str = NULL;
	for (str = strtok(a, sep); str != NULL; str = strtok(NULL, sep))
	{
		printf("%s\n", str);
	}
}

C語言字符函數(shù)和字符串函數(shù)詳解,C語言,c語言,開發(fā)語言

九.strerror函數(shù)

函數(shù)原型:char*strerror (int errnum)

功能:strerror函數(shù)可以把參數(shù)部分錯誤碼對應的錯誤信息的字符串地址返回來。 在不同的系統(tǒng)和C語言標準庫的實現(xiàn)中都規(guī)定了?些錯誤碼,?般是放在 errno.h 這個頭文件中說明 的,C語言程序啟動的時候就會使?一個全面的變量errno來記錄程序的當前錯誤碼,只不過程序啟動的時候errno是0,表示沒有錯誤,當我們在使用標準庫中的函數(shù)的時候發(fā)生了某種錯誤,就會講對應 的錯誤碼,存放在errno中,而?個錯誤碼的數(shù)字是整數(shù)很難理解是什么意思,所以每?個錯誤碼都是 有對應的錯誤信息的。strerror函數(shù)就可以將錯誤對應的錯誤信息字符串的地址返回。文章來源地址http://www.zghlxwxcb.cn/news/detail-841734.html

到了這里,關于C語言字符函數(shù)和字符串函數(shù)詳解的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • C語言——詳解字符函數(shù)和字符串數(shù)組(上)

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

    目錄 一、strlen的使用和模擬實現(xiàn) 1.strlen()函數(shù)的介紹 2.strlen()函數(shù)的具體使用 3.strlen函數(shù)的注意事項 4.strlen函數(shù)的模擬實現(xiàn) 二、strcpy的使用和模擬實現(xiàn) 1.strcpy()函數(shù)的介紹 2.strcpy()函數(shù)的具體使用 3.strcpy()函數(shù)的注意事項 4.strcpy函數(shù)的模擬實現(xiàn) 三、strcat 的使用和模擬實現(xiàn)? 1

    2024年01月16日
    瀏覽(22)
  • 【C語言】strcpy()函數(shù)(字符串拷貝函數(shù)詳解)

    【C語言】strcpy()函數(shù)(字符串拷貝函數(shù)詳解)

    ?? 個人主頁 :修修修也 ?? 所屬專欄 :C語言 ?? 操作環(huán)境 : Visual Studio 2022 目錄 ?一.strcpy()函數(shù)簡介 1.函數(shù)功能 2.函數(shù)參數(shù) 1.char * destination 2.const char * source 3.函數(shù)返回值 4.函數(shù)頭文件 二.strcpy()函數(shù)的具體使用 1.使用strcpy()函數(shù)完成字符數(shù)組間的字符拷貝 2.使用strcpy()函數(shù)完成

    2024年02月03日
    瀏覽(28)
  • 【C語言】【字符串函數(shù)】【超詳解】【下】!??!

    字符串函數(shù)【上】: 【C語言】【字符串函數(shù)】【超詳解】【上】?。。?CSDN博客 前言: 在上一篇中,我們已經詳細講解了C語言字符串函數(shù)中用到最多的幾種函數(shù)的使用及其模擬實現(xiàn),本篇我們就將學習C語言字符串函數(shù)中,一些非常實用但稍有難度的幾個字符串函數(shù)。 1、

    2024年03月18日
    瀏覽(29)
  • C語言——字符串函數(shù)(七千字詳解)

    C語言——字符串函數(shù)(七千字詳解)

    目錄 1、字符串函數(shù) 長度不受限制的字符串函數(shù) 1.1strlen 注意事項: strlen函數(shù)的使用 ?strlen函數(shù)的模擬實現(xiàn) ?1.2strcpy 注意事項: strcpy函數(shù)的使用 ?strcpy函數(shù)的模擬實現(xiàn) ?1.3strcat 注意事項 strcat函數(shù)的使用 strcat函數(shù)的模擬實現(xiàn)? 1.4strcmp strcmp的返回值 strcmp函數(shù)的使用 strcmp函數(shù)

    2024年02月04日
    瀏覽(26)
  • C語言:字符函數(shù)和字符串函數(shù)詳解及部分函數(shù)的模擬實現(xiàn)(前篇)

    C語言:字符函數(shù)和字符串函數(shù)詳解及部分函數(shù)的模擬實現(xiàn)(前篇)

    前言: C語言中對 字符和字符串 的處理很是頻繁,但是C語言本身是沒有字符串類型的, 字符串通常放在 常量字符串 中或者 字符數(shù)組 中。 字符串常量 適用于那些對它不做修改的字符串函數(shù)。 本篇文章將會 重點介紹處理字符和字符串的庫函數(shù)的使用和注意事項。 strlen函數(shù)

    2024年02月06日
    瀏覽(34)
  • C語言 strtok字符串分割函數(shù)詳解

    C語言 strtok字符串分割函數(shù)詳解

    strtok 函數(shù)的作用是比較獨特的,可以用來對字符串進行分割,對于我們獲取命令或者數(shù)據(jù)集合后的數(shù)據(jù)處理是不可或缺的一步。但是詳細介紹 strtok 的博文很少,而且linux手冊的介紹也比較簡單,這邊寫篇博文記錄一下學習到的這個函數(shù)的用法。 函數(shù)定義如下: 即從字符串

    2024年02月12日
    瀏覽(36)
  • C語言之字符串,內存操作函數(shù)詳解(一)

    C語言之字符串,內存操作函數(shù)詳解(一)

    ??博主CSDN主頁:杭電碼農-NEO?? ? ?專欄分類:C語言學習分享? ? ??代碼倉庫:NEO的學習日記?? ? ??關注我??帶你學習更多C語言知識 ? ???? C語言的標準庫為我們提供了豐富的字符串操作函數(shù)與內存操作函數(shù),有我們熟悉的 strlen ,strcpy ,也有我們不熟悉的 strchr , strstr 等

    2024年02月08日
    瀏覽(31)
  • 【我愛C語言】詳解字符函數(shù)isdigit和字符串轉換函數(shù)(atoi和snprintf實現(xiàn)互相轉換字符串)&&三種strlen模擬實現(xiàn)

    【我愛C語言】詳解字符函數(shù)isdigit和字符串轉換函數(shù)(atoi和snprintf實現(xiàn)互相轉換字符串)&&三種strlen模擬實現(xiàn)

    ??個人主頁 : @啊森要自信的主頁 ?? 真正相信奇跡的家伙,本身和奇跡一樣了不起??! 歡迎大家關注??點贊??收藏??留言??希望看完我的文章對你有小小的幫助,如有錯誤,可以指出,讓我們一起探討學習交流,一起加油鴨。 本小節(jié)我們將學習字符分類函數(shù),字符

    2024年02月04日
    瀏覽(33)
  • ?【C語言】長篇詳解,字符系列篇3-----strstr,strtok,strerror字符串函數(shù)的使用【圖文詳解?】

    ?【C語言】長篇詳解,字符系列篇3-----strstr,strtok,strerror字符串函數(shù)的使用【圖文詳解?】

    歡迎來CILMY23的博客喔,本期系列為?【C語言】長篇詳解,字符系列篇3-----strstr,strtok,strerror字符串函數(shù)的使用【圖文詳解?】,圖文講解各種字符串函數(shù),帶大家更深刻理解C語言中各種字符串函數(shù)的應用,感謝觀看,支持的可以給個贊哇。? 前言 上一篇說到,有不受長度限

    2024年02月22日
    瀏覽(29)
  • c語言進階部分詳解(詳細解析字符串常用函數(shù),并進行模擬實現(xiàn)(下))

    c語言進階部分詳解(詳細解析字符串常用函數(shù),并進行模擬實現(xiàn)(下))

    上篇文章介紹了一些常用的字符串函數(shù),大家可以跳轉過去瀏覽一下:c語言進階部分詳解(詳細解析字符串常用函數(shù),并進行模擬實現(xiàn)(上))_總之就是非常唔姆的博客-CSDN博客 今天接著來介紹一些:? 目錄 一.字符串查找 1.strstr() 1.1示例 1.2注意事項: 1.3模擬實現(xiàn) ?2.

    2024年02月07日
    瀏覽(20)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領取紅包

二維碼2

領紅包