超详细C语言的字符串函数讲解
字符串函數
前言
C語言中對字符和字符串的處理很是頻繁,但是C語言本身是沒有字符串類型的,字符串通常放在常量字符串中或者字符數組中。字符串常量 適用于那些對它不做修改的字符串函數
接下來本文就是對于介紹一些常用的字符串函數進行講解
所有字符串相關的函數都放在string.h的頭文件中
1. strlen😋
size_t strlen ( const char * str ) ;
字符串是以’\0’結尾的,那么strlen就是返回\0之前的字符個數
size_t是定義的一個宏,本質上是一個 unsigned int 類型
那么我們就有思路來實現strlen了只要遍歷字符串找’\0’
每找一個字符count就++
找到\0了那么就返回count
下面我們就來模仿一下如何實現
2.strcpy🤨
char * strcpy ( char * dest, const char * source );
把源字符串source的字符串拷貝到目的字符串dest中
注意會把source的’\0’也拷貝到dest中
為了避免溢出,dest要有足夠的空間來接受從source拷貝過來的字符串
代碼實現:
3.strcat😏
char * strcat ( char * destination, const char * source );
文檔原文:
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.
追加一個從源字符串拷貝過來的字符串到目的字符串中,目的字符串中的’\0’
會被源字符串中的第一個字符給覆蓋掉,并且’\0’會包含在新生成的字符串中
比如:
char str1[] = “hello”;
char str2[] = “world”;
使用strcat后, str1就會變為"helloworld"
原來str1的’\0’會被’w’字符給覆蓋掉
代碼實現:
4.strcmp🤗
學會閱讀文檔
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.
代碼實現:
5.strstr😫
const char * strstr ( const char * str1, const char * str2 );
Locate substring
Returns a pointer to the first occurrence of str2 in str1, or a null pointer if str2 is not part of str1.
The matching process does not include the terminating null-characters, but it stops there.
功能是判斷str1中是否包含str2這個子串
如果包含則返回在str1中的指向第一個出現str2首字符的指針
注意事項:這個比較過程不會包括’\0’但它會在’\0’的地方停止比較
這個函數比較復雜舉個例子:
char str1[] = “hello world”;
char str2[] = “llo”;
判斷str1中是否包含str2
顯然是包含的,那么它就會返回一個指向’l’的指針
這里我們引入三個指針,一個black指向str1的首元素,一個point指針指向str2的首元素,一個red指針用來和point比較
比較的步驟:
代碼實現:
const char* myStrstr(const char* str1,const char* str2){assert(str1 != NULL);assert(str2 != NULL);assert(*str1 != '\0');assert(*str2 != '\0');const char* black = str1;while(*black != '\0'){char* point = str2;char* red = black;if(*point != '\0' && *red != '\0' && *point == *red){red++;point++;// 相等的話就都加1比較下一個字符}// 上述循環有三種結束情況// 1.*point == '\0' 那么就找到了子串直接返回black// 2.*red == '\0' 可以直接返回0,將相當與red已經到了str1的最后 // 3. *point != *red 不相等就不用比較直接進入下次循環if (*point == '\0') {return black;}black++;}return NULL;// 若是循環結束了就是沒有找到直接返回NULL }這節的內容就到這啦友友們,有什么疑問歡迎私信我哦
還有兩個操作內存的函數是以字節為單位
memmove memcpy
這個就下次博客再講吧😏😏😏
總結
以上是生活随笔為你收集整理的超详细C语言的字符串函数讲解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows经典地雷小游戏(C语言实现
- 下一篇: 剑指offer03.数组中重复的数字