strlen函數
strlen所作的僅僅是一個計數器的工作,它從記憶體的某個位置(可以是字元串開頭,中間某個位置,甚至是某個不确定的記憶體區域)開始掃描,直到碰到第一個字元串結束符'\0'為止,然後傳回計數器值(長度不包含'\0')。
模拟實作strlen函數
#include<stdio.h>
#include<assert.h>
int my_strlen(const char *str)
{
int count = 0;
assert(str != NULL);
while (*str != '\0')
{
str++;
count++;
}
return count;
}
int main()
{
int ret = 0;
char arr[10] = "abcdefgh";
ret = my_strlen(arr);
printf("%d\n", ret);
system("pause");
return 0;
}
strcmp函數
C/C++函數,比較兩個字元串
設這兩個字元串為str1,str2,
若str1==str2,則傳回零;
若str1<str2,則傳回負數;
若str1>str2,則傳回正數。
/模拟實作strcmp函數
#include<stdio.h>
#include<assert.h>
int my_strcmp(char* arr1,char* arr2)
{
assert(arr1 && arr2);
while(*arr1==*arr2)
{
if(*arr1=='\0')
return 0;
}
return *arr1-*arr2;
}
int main()
{
char *arr1="abcde";
char *arr2="abcd";
int ret=my_strcmp(arr1,arr2);
printf("%d\n",ret);
return 0;
}
strcpy函數
C語言标準庫函數strcpy,把從src位址開始且含有'\0'結束符的字元串複制到以dest開始的位址空間,對src字元串一個一個進行拷貝,當遇到NULL時,dest拷貝停止。
模拟實作strcpy函數
#include<stdio.h>
#include<assert.h>
char* my_strcpy(char *dest,const char *src)
{
char *cp=dest;
assert(src && dest);
while(*dest++=*src++)
{
;
}
return cp;
}
int main()
{
char arr[30]={0};
printf("string=%s\n",my_strcpy(arr,"hello world"));
return 0;
}
strcat函數
将兩個char類型連接配接。
char d[20]="GoldenGlobal"; char *s="View"; strcat(d,s);
結果放在d中
printf("%s",d);
輸出 d 為 GoldenGlobalView (中間無空格)
d和s所指記憶體區域不可以重疊且d必須有足夠的空間來容納s的字元串。
傳回指向d的指針。
模拟實作strcat函數
#include<stdio.h>
#include<assert.h>
char* my_strcat(char* dest,char* src)
{
char *cp=dest;
assert(src && dest);
while(*dest!='\0')
{
dest++;
}
while(*dest++=*src++)
{
;
}
return cp;
}
int main()
{
char arr1[20]="abc";
char *arr2="def";
printf("%s\n",my_strcat(arr1,arr2));
return 0;
}
strstr函數
strstr(str1,str2) 函數用于判斷字元串str2是否是str1的子串。如果是,則該函數傳回str2在str1中首次出現的位址;否則,傳回NULL!
//模拟實作strstr函數
#include<stdio.h>
#include<assert.h>
const char* My_strstr(const char* arr, const char* src)
{
const char * str1 = arr;
const char * str2 = src;
const char * start = NULL;
assert(arr);
assert(src);
if (*str2 == '\0')
{
return str1;
}
while (*str1)
{
start = str1;
while ((*str1) && (*str2) && (*str1 == *str2))
{
str1++;
str2++;
}
if (*str2 == '\0')
{
return start;
}
str1 = start + 1;
str2 = src;
}
return NULL;
}
int main()
{
char arr[] = "abbbccbcdefghk";
char src[] = "bcd";
char* ret = My_strstr(arr, src);
if (ret == NULL)
{
printf("not exist!");
}
else
{
printf("%s\n", ret);
}
system("pause");
return 0;
}
以上就是C語言中幾種常見的函數,模拟實作的方法都比較簡單。歡迎各位朋友批評改正,新手上路,大神勿噴。謝謝大家~