一、字符串長度函數原型:數組
size_t strlen(char const *string);ide
strlen()計算的長度不包括'\0'。函數
strlen返回的值是一個無符號的整型,因此像if(strlen(x)-strlen(y)>=0)的結果是絕對爲真的,將達不到你想要的結果。spa
計算字符串長度的實現:指針
#include<stdio.h> #include<stdlib.h> int my_strlen(char *p) { int count = 0; while(*p != '\0') { count++; p++; } return count; } int main() { char arr[100]; scanf( "%s", arr); int ret = my_strlen(arr); printf( "%d\n", ret); system( "pause"); return 0; }
二、字符串複製函數原型:內存
char *strcpy(char *dst,char const *src);字符串
strcpy()函數是將參數src字符串中的字符複製到參數dst中,當參數dst和參數src內存出現重疊時,其結果是未定義的。原型
注意:string
一、strcpy()碰見'\0'才停下,因此當參數src字符串長度大於參數dst字符串時,多餘的字符會將參數dst字符串後面的內存空間覆蓋掉,這時很是危險的。it
二、當src中字符串比dst中的短時,因爲strcpy()會將src中的'\0',複製過去,因此新字符串後面的老字符串會被刪除掉。
char arr[]="hello world";
strcpy(arr,welcome);
w | e | l | c | o | m | e | 0 | r | l |
d | 0 |
如表,新字符串碰見'\0'停下,後面的字符就至關於被刪除了。
字符串複製「功能」的實現:
#include<stdio.h> #include<stdlib.h> void my_strcpy(char *p1, char *p2) { while (*p2 != '\0') { * p1 = *p2 ; p1++; p2++; } * p1 = '\0' ; } int main() { char arr1[100]; char arr2[50]; scanf( "%s", arr1); scanf( "%s", arr2); my_strcpy(arr1, arr2); printf( "%s\n", arr1); system( "pause"); return 0; }
三、字符串鏈接函數原型:
char *strcat(char *dst,char *src);
strcat()函數是將src中的字符串鏈接在dst中的字符串後面,若是src與dst位置發生重疊,其結果也是未定義的。
注意:在使用strcat()函數時,必需要考慮dst數組中除過原字符串以後剩下的空間可否容納下src。
字符串鏈接「功能」的實現:
#include<stdio.h> #include<stdlib.h> void my_strcat(char *p1, char *p2) { while (*p1 ) { p1++; } while (*p2 ) { * p1 = *p2 ; p1++; p2++; } * p1 = '\0' ; } int main() { char arr1[100]; char arr2[50]; scanf( "%s%s", arr1, arr2); my_strcat(arr1, arr2); printf( "%s\n", arr1); system( "pause"); return 0; }
四、字符串比較函數原型:
int strcmp(char const *s1,char const *s2);
字符串比較的是ASCII的值,對兩個字符串中的字符逐個比較,發現第一個不匹配的字符,若是s1中的ASCII大於s2中的,則返回一個大於零的數,若是小於,則返回一個小於零的數。若是s1中字符串比s2中短,則返回一個小於零的數。
若是一直匹配,直到‘\0’,兩個字符串就相等,則返回0。
字符串比較「功能」的實現:
#include<stdio.h> #include<stdlib.h> int my_strcmp(char *p1, char *p2) { if (*p1 == *p2) { while (*p1 == *p2) { if (*p2 == '\0') return 0; p1++; p2++; } if (*p1 > *p2) return 1; else return -1; } } int main() { char arr1[100]; char arr2[100]; scanf( "%s%s", arr1, arr2); int ret = my_strcmp(arr1,arr2); printf( "%d\n", ret); system( "pause"); return 0; }
五、查找一個字符函數原型:
char *strchr(char const *str,int ch);
char *strrchr(char const *str,int ch);
strchr()是查找第一次出現的位置,strrchr()是查找最後一次出現的位置。若是找到就返回一個指向這個位置的指針,若是沒找到就返回NULL。
查找一個字符第一次出現「功能」的實現:
#include<stdio.h> #include<stdlib.h> char *my_strchr(char *p, char chr) { while (*p ) { if (*p == chr) return p ; p++; } return NULL ; } int main() { char arr[100]; char chr; printf( "輸入被查找使我字符\n" ); scanf( "%c", &chr); printf( "輸入查找的字符串\n" ); scanf( "%s",arr); char *ret=my_strchr(arr, chr); printf( "%s\n", ret); system( "pause"); return 0; }
「查找一個字符最後一次出現」功能的實現:
#include<stdio.h> #include<stdlib.h> char *my_strrchr(char *p, char chr) { char *p2 = NULL ; while (*p ) { if (*p == chr) p2 = p; p++; } return p2; } int main() { char arr[100]; char chr; printf( "輸入被查找的字符\n" ); scanf( "%c", &chr); printf( "輸入查找的字符串\n" ); scanf( "%s", arr); char *ret = my_strrchr(arr, chr); printf( "%s\n", ret); system( "pause"); return 0; }
六、查找一個字符串是不是另外一個字符串的子串原型:
char *strstr(char const *s1,char const *s2);
這個函數在s1中查找整個s2在s1第一次出現的位置,若是找到 則返回這個地址,若是沒有找到,則返回NULL,若是s2爲空字符串,則返回s1。
查找一個字串「功能」的實現:
#include<stdio.h> #include<stdlib.h> char *my_strstr(char *p1, char *p2) { if (*p2 == NULL) return p1 ; while (*p1 ) { if (*p1 == *p2) { char *p3 = p1 ; char *p4 = p2 ; while (*p3 == *p4) { if (*p4 == '\0' ) return p1 ; p3++; p4++; } if (*p4 == '\0' ) return p1 ; } p1++; } return NULL ; } int main() { char arr1[100]; char arr2[100]; scanf( "%s%s", arr1, arr2); int ret = my_strstr(arr1, arr2); printf( "%d\n", ret); system( "pause"); return 0; }