🥰歡迎關注?輕松拿捏C語言系列,來和 小哇 一起進步!?
學習了函數后,老師讓我們用函數來實現上面這四個字符串函數。
我們首先來了解一下這四個字符串函數:
1.strlen函數
用于獲取字符串長度(不包括末尾的空字符'\0')
函數原型:size_t strlen(const char *str);
參數str是一個指向字符串的指針。
返回值:返回字符串的長度(無符號整數)。
strlen函數使用例子,
#include <stdio.h>
#include <string.h> int main() { char str[] = "Hello, World!"; printf("%d\n", strlen(str)); // 輸出:13 return 0;
}
?接下來讓我們用函數來實現strlen函數的功能
int Strlen(char ch[])
{int count = 0;while (*ch!='\0')//可以只寫成 *ch,當*ch為'\0'時條件為假{count++;ch++;}return count;
}
int main()
{char ch[100];scanf("%99s", ch);//讀取最多99個字符以防止緩沖區溢出printf("打印數組ch:\n");printf("%s\n", ch);//模擬調用strlenprintf("數組ch中輸入的字符個數為:%d\n", Strlen(ch));return 0;
}
還可以用遞歸函數來寫一下
int DiguiStrlen(char* ch)
{if ('\0' == *ch)return 0;elsereturn 1 + DiguiStrlen(ch + 1);
}
?2.strcpy函數
用于將源字符串中的內容復制到目標字符串中。
函數原型:char *strcpy(char *dest, const char *src);
參數dest是目標字符串的指針,src是源字符串的指針。
返回值:返回目標字符串的指針。
注意:使用strcpy時必須確保目標字符串有足夠的空間來存儲源字符串,包括末尾的空字符 '\0'。否則,可能會導致緩沖區溢出,這是一個常見的安全漏洞。
strcpy函數使用例子,
#include <stdio.h>
#include <string.h>
int main()
{ char dest[20]; char src[] = "Hello, World!"; strcpy(dest, src); printf("dest: %s\n", dest); // 輸出:dest: Hello, World! return 0;
}
用函數實現strcpy的功能:
void Strcpy(char* a,char* ch)
{int i = 0;for (i; ch[i]!='\0'; i++)a[i] = ch[i];a[i] = '\0';//給字符數組a后添加\0以確保其能夠正確終止
}
int main()
{char ch[100];char a[100];scanf("%99s", ch);//讀取最多99個字符以防止緩沖區溢出printf("打印數組ch:\n");printf("%s\n", ch);//模擬調用strcpyStrcpy(a, ch);printf("%s\n", a);return 0;
}
注意要在函數中給目標字符數組a的最后添加'\0',我一開始經常忽略這部分,導致每次程序運行打印字符數組a時都打出很多個 燙燙燙 這樣的亂碼,這是內存中其他部分的隨機字節被解釋成字符后的結果。?
3. strcmp函數
比較兩個字符串中對應位置字符的ASCII碼值的大小
函數原型:int strcmp(const char *str1, const char *str2);?
如果str1小于str2,則返回值小于0
如果str1等于str2,則返回值為0
如果str1大于str2,則返回大于0
它是一個字符一個字符地比較,ASCII碼值不同就返回結果;如果兩個字符完全相同就返回0
strcmp函數使用例子,
#include <stdio.h>
#include <string.h>
int main() { char str1[] = "apple"; char str2[] = "banana"; int r= strcmp(str1, str2); printf("%d\n", r); // 輸出:-1 return 0;
}
用函數實現strcmp的功能,
int Strcmp(char ch[],char* b,int len_ch,int len_b)
{int len = 0;//兩個字符串長度不同時,先取相同長度if (len_ch > len_b)len = len_b;elselen = len_ch;int i = 0;//比較相同長度部分for (i; i < len; i++){if (ch[i] > b[i])return 1;else if (ch[i] < b[i])return -1;//當前比較字符相同時,continue跳過后面//進入下一次循環比較下一個字符elsecontinue;}if (ch[i] == '\0' && b[i] == '\0')return 0;else if (ch[i] == '\0' && b[i] != '\0')return -1;elsereturn 1;}
int main()
{char ch[100];char b[] = "grape";scanf("%99s", ch);//讀取最多99個字符以防止緩沖區溢出printf("打印數組ch:\n");printf("%s\n", ch);//模擬調用strcmpprintf("%d\n", Strcmp(ch,b,Strlen(ch),Strlen(b)));return 0;
}
4. strcat函數
將源字符內容拼接到目標字符末尾。
原型:char *strcat(char *dest, const char *src);
參數dest是目標字符串的指針,src是源字符串的指針。
返回值:返回目標字符串的指針。
注意:使用strcat時必須確保目標字符串有足夠的空間來存儲追加后的字符串,包括末尾的空字符 '\0'。否則,可能會導致緩沖區溢出。
strcat函數使用例子,
#include <stdio.h>
#include <string.h>
int main() { char dest[100] = "Hello, "; char src[] = "World!"; strcat(dest, src); printf("%s\n", dest); // 輸出:Hello, World! return 0;
}
用函數實現strcat的功能:
void Strcat(char ch[], char b[],int len_ch)
{int i = len_ch;for (i; *b != '\0'; i++){ch[i] = *b;//將字符數組b的內容拼接在字符數組ch后面b++;}ch[i] = '\0';
}
int main()
{char ch[100];char b[] = "grape";scanf("%99s", ch);//讀取最多99個字符以防止緩沖區溢出printf("打印數組ch:\n");printf("%s\n", ch);//模擬調用strcatStrcat(ch, b, Strlen(ch));printf("%s\n", ch);return 0;
}
🎉🎉本次的內容結束啦,歡迎有問題評論區討論。
😘💕希望大家能夠三連支持,你們的鼓勵是我前進的動力
🌹🌹謝謝觀看!