常用字符串函数的使用
生活随笔
收集整理的這篇文章主要介紹了
常用字符串函数的使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
一.求字符串長度
1.strlen用來計算字符串的長度(該長度不包括'\0')
二.長度不受限制的字符串函數
1.strcpy字符串拷貝
?2.strcat附加一個字符串
?3.strcmp字符串大小比較
?三.長度受限制的字符串函數介紹
1.strncpy字符串拷貝(能設置要拷貝的字符個數)
?2.strncat 附加一個字符串(可指定要附加的大小)
?3.strncmp 字符串比較(可設置比較的個數)
四.字符串查找
1.strstr子字符串的查找
2.strtok字符串拆分
一.求字符串長度
1.strlen用來計算字符串的長度(該長度不包括'\0')
#include<stdio.h> #include<string.h> int main() {char arr[]="abcdef";int ret=strlen(arr);printf("%d\n",ret);return 0; }運行結果:
模擬實現strlen
#include<stdio.h> #include<assert.h> size_t my_strlen(const char* arr) {assert(arr);//斷言用來判斷接收的arr是否為NULLint count = 0;while (*arr++)//當*arr不等于'\0'時繼續往下計算{count++;}return count; } int main() {char arr[] = "abcdef";int ret = my_strlen(arr);//將arr傳過去,傳的是數組首元素的地址printf("%d\n", ret);return 0; }二.長度不受限制的字符串函數
1.strcpy字符串拷貝
#include<stdio.h> #include<string.h> int main() {char arr1[] = "abcdef";char arr2[10] = { 0 };strcpy(arr2, arr1);printf("%s\n", arr2);return 0; }運行結果:
模擬實現strcpy
#include<stdio.h> #include<assert.h> char* my_strcpy(char* dest, const char* str) {assert(dest && str);char* ret = dest;//記錄dest的起始位置while (*dest++ = *str++)//當*str不等于'\0'時一直將現在的值賦值給dest{;}return ret;//函數返回類型為char*用ret返回 } int main() {char arr1[] = "abcdef";char arr2[10] = { 0 };my_strcpy(arr2, arr1);printf("%s\n", arr2);return 0; }?2.strcat附加一個字符串
?
#include<stdio.h>
#include<string.h>
int main()
{char arr1[10] = "abcd";char arr2[] = "efg";strcat(arr1, arr2);printf("%s\n", arr1);return 0;
}
運行結果:
模擬實現strcat
#include<stdio.h> #include<assert.h>char* my_strcat(char* dest, const char* str) {assert(dest && str);char* ret = dest;while (*dest)//找到'\0'的位置{dest++;}while (*dest++ = *str++)//將字符賦值給目標{;}return ret; } int main() {char arr1[10] = "abcd";char arr2[] = "efg";my_strcat(arr1, arr2);printf("%s\n", arr1);return 0; }?3.strcmp字符串大小比較
#include<stdio.h> #include<string.h> int main() {char arr1[] = "zhangsan";char arr2[] = "lisi";int ret = strcmp(arr1, arr2);printf("%d\n",ret);return 0; }運行結果:
模擬實現strcmp
string1小于string2時返回值小于0
string1等于string2時返回值等于0
string1大于string2時返回值大于0
該比較方法為比較等同位置的字符的ASCLL值的大小
若相同的話比較下一個字符的ASCLL值的大小
#include<stdio.h> #include<assert.h>int my_strcmp(const char* str1, const char* str2) {assert(str1 && str2);while (*str1 == *str2&&*str1!='\0')//如果*str1和*str2相等且不等于'\0'時進行循環往下查找不相等的位置{str1++;str2++;}return *str1 - *str2;//兩個字符的ASCLL值相減比較大小 } int main() {char arr1[] = "zhangsan";char arr2[] = "lisi";int ret = my_strcmp(arr1, arr2);printf("%d\n", ret);return 0; }運行結果:
?三.長度受限制的字符串函數介紹
1.strncpy字符串拷貝(能設置要拷貝的字符個數)
#include<stdio.h> #include<string.h> int main() {char arr1[20] = "abcde";char arr2[20] = { 0 };strncpy(arr2, arr1, 4);printf("%s\n", arr2);return 0; }?運行結果:
模擬實現strncpy?
#include<stdio.h> #include<assert.h>char* my_strncpy(char* dest, const char* str, size_t count)//該count的單位為字節 {assert(dest && str);char* ret = dest;while (count--)//循環的次數即為要賦值的個數{*dest++ = *str++;}return ret; } int main() {char arr1[20] = "abcde";char arr2[20] = { 0 };my_strncpy(arr2, arr1, 4);printf("%s\n", arr2);return 0; }?2.strncat 附加一個字符串(可指定要附加的大小)
#include<stdio.h> #include<string.h> int main() {char arr1[20] = "Hello ";char arr2[20] = "World and Earth";strncat(arr1, arr2, 5);printf("%s\n", arr1);return 0; }運行結果:
模擬實現strncat
#include<stdio.h> #include<assert.h> char* my_strncat(char* dest, const char* str, size_t count) {assert(dest && str);char* ret = dest;while (*dest)//找到'\0'的位置{dest++;}while (count--)//循環執行的次數{*dest++ = *str++;}return ret; } int main() {char arr1[20] = "Hello ";char arr2[20] = "World and Earth";my_strncat(arr1, arr2, 5);printf("%s\n", arr1);return 0; }?3.strncmp 字符串比較(可設置比較的個數)
#include<stdio.h> #include<string.h> int main() {char arr1[] = "zhangsan";char arr2[] = "zhangyi";int ret1 = strncmp(arr1, arr2, 5);int ret2 = strncmp(arr1, arr2, 6);printf("%d\n", ret1);printf("%d\n", ret2);return 0; }運行結果:
模擬實現strncmp
?
#include<stdio.h> #include<assert.h>int my_strncmp(const char* str1, const char* str2, size_t count) {assert(str1 && str2);while (count&&*str1==*str2)//如果*str1和*str2相等且不等于'\0'時進行循環往下查找不相等的位置{count--;str1++;str2++;}if (count == 0)//如果循環的次數全部執行說明要比較的字符串相等return 0;return *str1 - *str2;//ASCLL值相減比較大小 } int main() {char arr1[] = "zhangsan";char arr2[] = "zhangyi";int ret1 = my_strncmp(arr1, arr2, 5);int ret2 = my_strncmp(arr1, arr2, 6);printf("%d\n", ret1);printf("%d\n", ret2);return 0; }四.字符串查找
1.strstr子字符串的查找
#include<stdio.h> #include<string.h> int main() {char arr1[] = "abcdefabcd";char arr2[] = "efa";char* ret = strstr(arr1, arr2);printf("%s\n", ret);return 0; }運行結果:
?
?模擬實現strstr
?該函數的第一個參數為母字符串的首元素地址,第二個參數為子字符串的首元素的地址
#include<stdio.h> #include<assert.h>char* my_strstr(const char* str1, const char* str2) {assert(str1 && str2);char* ret = str1;//記錄開始比較的地址while (*str1 == *str2 && *str2 != '\0')//尋找子字符串{str1++;str2++;}if (*str2 == '\0')//找到了return ret;ret++;if (*str1 == '\0')//找不到return NULL; } int main() {char arr1[] = "abcdefabcd";char arr2[] = "efa";char* ret = strstr(arr1, arr2);printf("%s\n", ret);return 0; }2.strtok字符串拆分
strtok能將規定的字符轉換為'\0'
#include<stdio.h> #include<string.h> int main() {char arr1[] = "zxcvbnm@qq.com";const char* str = "@.";//能被轉為'\0'char arr2[20] = { 0 };strcpy(arr2, arr1);char* ret = NULL;for (ret = strtok(arr2, str); ret != NULL; ret = strtok(NULL, str))//for循環中第一個表達式找到arr1首元素的地址,該字符串到了'\0'才會停下,第3個表達式的NULL能找到上一次記錄的地址{printf("%s\n", ret);}return 0; }五.錯誤信息報告?
1.strerror發現錯誤的信息
#include<stdio.h> #include<string.h> int main() {int* p = (int*)malloc(_CRT_INT_MAX);//用malloc動態申請_CRT_INT_MAX個字節的內存,_CRT_INT_MAX值太大內存不足,產生錯誤?if (p == NULL)//如果為空指針的話會將錯誤碼返回到errno中{printf("%s\n", strerror(errno));//用strerror接受錯誤的信息并打印出來}return 0; }?
運行結果:
?
內容到這里結束了,如果感覺有幫助的話點個贊唄
總結
以上是生活随笔為你收集整理的常用字符串函数的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C51单片机播放音乐《起风了》
- 下一篇: 熔断的原理