strncmp,strncat和strncpy的模拟实现

1.strncmp
函数原型:char*strncmp( char *str1, const char *str2, size_t n)
函数功能:strncpy用来比较str1和str2字符串的前n个字符。如果两个字符串相等,strncmp返回0。
strncmp()函数比较指定size个字符,如果字符串str1和str2的前size个字符相同,函数返回0;
字符串比较的大小是由ASCII码表上的顺序决定,这个顺序也是字符值。
strncmp()首先将str1的第一个字符值减去str2的第一个字符值,
若差值为0,则继续比较下一个字符,直到遇到字符结束标志'\0', 若差值不为0,则将差值返回。
注意:要比较的字符串包括'\0', 一旦遇到'\0'结束比较,无论n为多少,不再继续比较。
例如"Ac""ba"比较会返回字符"A(65)""b(98)"的差值( - 33)。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
char my_strncmp( const char *str1, const char *str2, int count)
{
        assert(str1 != NULL);
        assert(str2 != NULL);
         while (*str1 == *str2)
        {
                if ((*str1 == '\0' ) || (*str2 == '\0' ))
                        return 0;
               str1++;
               str2++;
               count--;
        }
         if (*str1>*str2)
                return 1;
         else if (*str1 < *str2)
                return -1;
         else
                return 0;
}
int main( void )
{
         int ret = 0;
         char arr1[] = "Ac" ;
         char arr2[] = "ba" ;
        ret = my_strncmp(arr1, arr2, 4);
        printf( "%d\n" , ret);
        system( "pause" );
         return 0;
}

2.strncat
函数原型:char*strncat( char *dest, const char *src, size_t n)
函数功能:把src的前n个字符添加到dest 所指的字符串的结尾处,
并覆盖dest所指字符串的'\0', 从而实现字符串的链接。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
char *my_strncat( char *dest, char *src, size_t num)
{
        assert(dest != NULL);
        assert(src != NULL);
         char *ret = dest;
         while (*dest)
        {
               dest++;
        }
         while (num&&*src)
        {
               *dest++ = *src++;
        }
        *dest = '\0' ;
         return ret;
}
int main( void )
{
         char p[100] = "hello" ;
         char q[] = " world" ;
         int ret = 0;
        ret = my_strncat(p, q, 20);
        printf( "%s\n" , ret);
        system( "pause" );
         return 0;
}


3.strncpy
函数原型:char *strncmp(char*dest, char*src, size_t n)
函数功能:
(1)复制字符串src中的内容(字符,数字,汉字等)到字符串dest中,复制多少由size_t的值决定。
(2)如果src的前n个字符不含NULL字符,则结果不会以NULL字符结束,
(3)如果src>n, 只将src的前n个字符复制到dest中,不自动添加'\0', 也就是说dest中没有'\0',
需要手动添加'\0'.
(4)如果src<n,则以NULL填充到dest中直到复制完n个字节。
注意:src和dest所指的区域不能重叠,而且dest必须要有足够的空间来容纳src的字符 + '\0'

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
char *my_strncpy( char *dest, const char *src, size_t num)
{
        assert(dest != NULL);
        assert(src != NULL);
         while (num && (*dest++ = *src++))
        {
               num--;
        }
         if (num > 0)
        {
                while (num--)
               {
                       *dest = '\0' ;
               }
        }
         return dest;
}
int main( void )
{
         char arr1[20];
         char p = "abcdef" ;
        my_strncpy(arr1, p, 10);
        printf( "%s\n" , arr1);
        system( "pause" );
         return 0;

}


猜你喜欢

转载自blog.csdn.net/qq_40955824/article/details/80627075
今日推荐