C 標準字串函式的自實現
阿新 • • 發佈:2018-11-11
文章目錄
說明
標準字串:以 ‘\0’ 作為字串的結束符
不使用 C/C++ 庫函式,程式設計實現以下函式功能
- int strcmp( char * str1, char * str2 );
- char * strcpy( char * str1, char * str2 );
- char * strcat( char * str1, char * str2 );
- int strlen( char * str );
- char * strstr( char * str1, char * str2 );
以上函式只能處理標準字串!!!
strcmp()
int mystrcmp(const char *str1,const char *str2)
{
if(str1==NULL || str2==NULL)
{
printf("The string is error!\n"); /*非法的字串比較,程式終止*/
exit(0);
}
while(*str1!='\0' && *str2!='\0' && *str1 == *str2)
{
str1++; /*將兩個字串從頭開始逐個字元進行比較*/
str2++;
}
if(*str1 != '\0' && *str2 == '\0')
{
return 1; /*字串str2已經比較到了結尾,而字串str1還沒有到結尾*/
}
else if(*str1 == '\0' && *str2 != '\0')
{
return -1; /*字串str1已到結尾,而字串str2還沒有到結尾*/
}
else if(*str1 > *str2)
{
return 1; /*字串str1中的字元大於str2中的字元*/
}
else if(*str1 < *str2)
{
return -1; /*字串str1中的字元小於str2中的字元*/
}
return 0; /*字串相等,返回0*/
}
strcpy()
char *mystrcpy(char *str1, const char *str2) {
char *p = str1;
if(p == NULL || str2 == NULL) {
printf("The string is error!\n"); /*非法的字串拷貝*/
exit(0);
}
while(*str2 != '\0') { /*實現字串的拷貝*/
*p = *str2;
p++;
str2++;
}
*p = '\0'; /*向字串str1中新增結束標誌*/
return str1; /*返回目的字串的頭指標*/
}
strcat()
char *mystrcat(char *dst, const char *src) {
assert(dst != NULL && src != NULL);
char *temp = dst;
while (*temp != '\0')
temp++;
while ((*temp++ = *src++) != '\0');
return dst;
}
strlen()
int mystrlen(const char *str) {
int i;
i = 0;
while((*str++) != '\0') {
i++;
}
return i;
}
strstr()
char *mystrstr(const char *str1, const char *str2) {
char *src, *sub;
if(str1 == NULL || str2 == NULL) {
printf("The string is error!\n");
exit(0);
}
while(*str1 != '\0') {
src = str1;
sub = str2;
do {
if(*sub == '\0') {
return str1; /*找到子串*/
}
} while(*src++ == *sub++);
str1++;
}
return NULL;
}