【C語言】常用的字串函式及相關函式的自我實現
目錄
一、常用的庫函式
1.strlen()函式
- 用於求字串的長度。
strlen() 函式從字串的開頭位置依次向後計數,直到遇見'\0',然後返回計時器的值。最終統計的字串長度不包括'\0'。
- 標頭檔案:string.h
- 語法/原型:
size_t strlen(const char* str);
- 引數: str 是指向字串的指標。
- 返回值:字串 str 的長度(實際是字串有效位元組數)。
- 【例項演示】
#include <stdio.h>
#include <string.h>
int main() {
char str[] = { "abcd" };
int len1=strlen(str);
printf("字串長度(有效字元長度):length=%d\n", len1);
}
執行結果:
2.strcpy() 函式
- 用於對字串進行復制(拷貝)。
- 標頭檔案:string.h
- 語法/原型:
char* strcpy(char* strDestination, const char* strSource);
引數說明:strDestination:目的字串;strSource:源字串。
strcpy() 會把 strSource 指向的字串複製到 strDestination。
必須保證 strDestination 足夠大,能夠容納下 strSource,否則會導致溢位錯誤。
- 返回值:目的字串,也即 strDestination。
- 【例項演示】
#include <stdio.h>
#include <string.h>
int main() {
char dest[50] = { 0 };
char src[50] = { "hello" };
strcpy(dest, src);
puts(dest);
}
執行結果:
3.strcmp()函式
- 用於對兩個字串進行比較(區分大小寫)。
- 標頭檔案:string.h
- 語法/原型:
int strcmp(const char* stri1,const char* str2);
引數 str1 和 str2 是參與比較的兩個字串。
strcmp() 會根據 ASCII 編碼依次比較 str1 和 str2 的每一個字元,直到出現不到的字元,或者到達字串末尾(遇見\0
)。
- 返回值:
如果返回值 < 0,則表示 str1 小於 str2。
如果返回值 > 0,則表示 str2 小於 str1。
如果返回值 = 0,則表示 str1 等於 str2。
- 【例項演示】
#include <stdio.h>
#include <string.h>
int main() {
char str1[50] ="hello" ;
char str2[50] = "world";
int res=strcmp(str1, str2);
if (res > 0) {
printf("%s > %s\n",str1,str2);
}
else if(res==0){
printf("%s = %s\n", str1, str2);
}
else {
printf("%s < %s\n", str1, str2);
}
}
執行結果:
4.strcat()函式
- 用來將兩個字串連線(拼接)起來。
- 標頭檔案:string.h
- 語法/原型:
char*strcat(char* strDestination, const char* strSource);
引數說明:strDestination:目的字串;strSource:源字串。
strcat() 函式把 strSource 所指向的字串追加到 strDestination 所指向的字串的結尾,所以必須要保證 strDestination 有足夠的記憶體空間來容納兩個字串,否則會導致溢位錯誤。
注意:strDestination 末尾的'\0'
會被覆蓋,strSource 末尾的'\0'
會一起被複制過去,最終的字串只有一個'\0'
。
- 返回值:指向 strDestination 的指標。
- 【例項演示】
#include <stdio.h>
#include <string.h>
int main() {
char str1[101] = { "hello" };
char str2[50] = { "world" };
strcat(str1, str2);
puts(str1);
}
執行結果:
5. strchr() 函式
- 用於查詢給定字串中某一個特定字元第一次出現的位置。
- 標頭檔案:string.h
- 語法/原型:
char* strchr(const char* str, char c);
引數說明:str:被查詢的字串; c:要查詢的字元。
strchr() 函式會依次檢索字串 str 中的每一個字元,直到遇見字元 c,或者到達字串末尾(遇見\0
)。
- 返回值:返回在字串 str 中第一次出現字元 c 的位置,如果未找到該字元 c 則返回 NULL。
- 【例項演示】
#include <stdio.h>
#include <string.h>
int main(){
char* str = "hello world";
char c = 'l';
char* p = strchr(str,c);
if (p) {
puts("Found");
printf("字元%c第一次出現的位置(下標)為:%d\n",c,(p-str)/sizeof(char));
}
else {
puts("Not found");
}
return 0;
}
執行結果:
6. strrchr() 函式
- 用於查詢給定字串中某一個特定字元最後一次出現的位置。
- 標頭檔案:string.h
- 語法/原型:
char* strrchr(const char* str, char c);
引數說明:str:被查詢的字串; c:要查詢的字元。
- 返回值:返回在字串 str 中最後一次出現字元 c 的位置,如果未找到該字元 c 則返回 NULL。
- 【例項演示】
#include <stdio.h>
#include <string.h>
int main(){
char* str = "hello world";
char c = 'l';
char* p = strrchr(str,c);
if (p) {
puts("Found");
printf("字元%c最後一次出現的位置(下標)為:%d\n",c,(p-str)/sizeof(char));
}
else {
puts("Not found");
}
return 0;
}
執行結果:
7. strstr() 函式
- 用於在給定字串中查詢某一個特定子串。
- 標頭檔案:string.h
- 語法/原型:
char *strstr(const char *haystack, const char *needle)
引數說明:haystack:源字串;needle:子字串。
- 返回值:返回在 haystack 中第一次出現 needle 字串的位置,如果未找到則返回 NULL。
- 【例項演示】
#include <stdio.h>
#include <string.h>
int main(){
char* str1 = "hello world";
char* str2 = "or";
char* p = strstr(str1,str2);
if (p) {
puts("Found");
printf("字元%s第一次出現的位置(下標)為:%d\n",str2,(p-str1)/sizeof(char));
}
else {
puts("Not found");
}
return 0;
}
執行結果:
二、常用字串函式的自我實現
1.求字串的長度
#include <stdio.h>
#include <string.h>
int Length(const char* str) {
int len = 0;
assert(str);
while (*str != '\0') {
len++;
str++;
}
return len;
}
int main() {
const char* str1 = "hello world";
printf("字串長度:%d\n", Length(str1));
}
執行結果:
2.字串拷貝函式
#include <stdio.h>
#include <assert.h>
char* Mystrcpy(char* dest, const char* src) {
assert(dest);
assert(src);
char* p = dest;
while (*src != '\0') {
*dest = *src;
dest++;
src++;
}
*dest = '\0';
return p;
}
int main() {
char str1[1024] = "hello" ;
const char* str2 = "world";
printf("字串str1替換為:%s\n", Mystrcpy(str1,str2));
執行結果:
3.字串連線函式
#include <stdio.h>
#include <assert.h>
char* Mystrcat(char* dest, const char* src) {
assert(dest);
assert(src);
char* p = dest;
while (*dest != '\0') {
dest++;
}
while (*src != '\0') {
*dest = *src;
dest++;
src++;
}
*dest = '\0';
return p;
}
int main() {
char str1[1024] = "hello" ;
const char* str2 = "world";
printf("字串str1連線為:%s\n", Mystrcat(str1, str2));
}
執行結果:
4.字串比較函式
#include <stdio.h>
#include <assert.h>
int Mystrcmp(const char* dest, const char* src) {
assert(dest);
assert(src);
while (*dest == *src) {
if (*dest == '\0') {
return 0;
}
dest++;
src++;
}
return (*dest - *src);
}
int main() {
const char* str1 = "hello";
const char* str2 = "world";
printf("%d\n", Mystrcmp(str1, str2));
}
執行結果:
5.在字串中查詢指定字元第一次出現的位置
#include <stdio.h>
#include <assert.h>
char* Mystrrchr(const char* str, char c) {
assert(str);
char* p = (char*)str;
while (*p != c) {
if (*p == '\0') {
return NULL;
}
p++;
}
return p;
}
int main() {
const char* str1 = "hello";
char ch = 'o';
char* p= Mystrrchr(str1,ch);
if (p == NULL) {
printf("Not found");
}
else {
printf("字元%c第一次出現位置(下標):%d\n",ch, (p-str1)/sizeof(char));
}
}
執行結果:
相關文章
- C語言相關的基礎字串函式C語言字串函式
- c語言與字串相關的庫函式的模擬實現C語言字串函式
- 字串相關函式的實現字串函式
- C語言-字串函式的實現(五)之strstrC語言字串函式
- C語言-字串函式的實現(一)之strlenC語言字串函式
- C語言常用函式C語言函式
- 字串的相關函式字串函式
- C語言的函式C語言函式
- 模擬實現不受限制的字串函式--C語言版字串函式C語言
- C語言庫函式及示例C語言函式
- C 語言實現泛型 swap 函式泛型函式
- C語言函式sscanf()的用法C語言函式
- C語言qsort函式的使用C語言函式
- C語言有關函式淺析C語言函式
- 物件及函式相關物件函式
- C語言 execve()函式C語言函式
- C語言-記憶體函式的實現(二)之memmoveC語言記憶體函式
- C語言-記憶體函式的實現(一)之memcpyC語言記憶體函式memcpy
- c++字串查詢函式實現C++字串函式
- 總結常用的字串函式字串函式
- 字串比較的常用函式字串函式
- 【C語言】函式的概念和函式的呼叫(引數傳遞)C語言函式
- 08. C語言函式C語言函式
- C語言 函式指標C語言函式指標
- C語言基礎函式C語言函式
- C語言函式呼叫棧C語言函式
- C語言之字串處理函式C語言字串函式
- C語言函式指標與回撥用函式C語言函式指標
- c語言函式指標的定義C語言函式指標
- SQL中常用的字串LEFT函式和RIGHT函式詳解!SQL字串函式
- Hive常用函式及自定義函式Hive函式
- C語言解讀assert函式C語言函式
- C#語言函式遞迴C#函式遞迴
- C語言——常用標準輸入輸出函式 scanf(), printf(), gets(), puts(), getchar(), putchar(); 字串拷貝函式 strcpy(), strncpy(), strchr(), strstr()函式用法特點C語言函式字串
- 使用函式式語言實踐DDD函式
- C++分割字串,及strtok函式使用C++字串函式
- C語言中函式printf()和函式scanf()的用法C語言函式
- MySQL 字串擷取相關函式總結MySql字串函式