zoukankan      html  css  js  c++  java
  • C标准库string.h中几个常用函数的使用详解

    strlen

    计算字符串长度

    size_t strlen(const char *str)
    

    计算字符串 str 的长度,直到空结束字符,但不包括空结束字符。

    函数实现:

    int Strlen(const char *str)
    {
    	assert(str);
    	int len = 0;
    	while ((*str++) != '')len++;
    	return len;
    }
    

    strcpy

    字符串复制

    char *strcpy(char *dest, const char *src)
    

    把 src 所指向的字符串复制到 dest。

    函数实现:

    char *Strcpy(char *dst, const char *src)
    {
    	assert(dst && src);
    	char *tmp = dst;
    	while ((*dst++ = *src++) != '');
    	return tmp;
    }
    

    strncpy

    复制连续的n个字符

    char *strncpy(char *dest, const char *src, size_t n)
    

    把 src 所指向的字符串复制到 dest,最多复制 n 个字符。

    函数实现:

    char *Strncpy(char *dst, const char *src, int len)
    {
    	assert(dst&&src);
    	char *tmp = dst;
    	int offset = 0;
    	if (len > strlen(src))
    	{
    		offset = len - strlen(src);
    		len = strlen(src);
    	}
    	while (len--)
    	{
    		*dst++ = *src++;
    	}
    	while (offset--)
    	{
    		*dst++ = '';
    	}
    	return tmp;
    }
    

    strcat

    把一个字符串连接到另一个字符串后面

    char *strcat(char *dest, const char *src)
    

    把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。

    函数实现:

    char *Strcat(char *dst, const char* src)
    {
    	assert(dst && src);
    	char *tmp = dst;
    	while (*dst++);
    	dst--;
    	while (*dst++ = *src++);
    	return tmp;
    }
    

    strncat

    把连续的n个字符连接到另一个字符串后面

    char *strncat(char *dest, const char *src, size_t n)
    

    把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n 字符长度为止。

    函数实现:

    char *Strncat(char *dst, const char* src, int len)
    {
    	assert(dst && src);
    	char *tmp = dst;
    	while (*dst++);
    	dst--;
    	while (len--)
    	{
    		*dst++ = *src++;
    	}
    	*dst = '';
    	return tmp;
    }
    

    示例:

    #include <stdio.h>
    #include <string.h>
    
    int main(void)
    {
        char str0[20] = "Test:";
        char str1[20] = "Welcome9999";
        char str2[20] = " To ";
        char str3[20] = "0123Beijing55";
        char tmp[100];
    
        strcpy(tmp, str0);
        puts(tmp);      //Test:
    
        strncpy(tmp, str1, 7);  //取st1前7个字符
        puts(tmp);      //Welcome
    
        strcat(tmp, str2);      //连接str2
        puts(tmp);
    
        strncat(tmp, str3 + 4, 7);  //取str3+4之后的7个字符
        puts(tmp);
    
        return 0;
    }
    

    输出结果:

    strchr

    查找某字符在字符串中首次出现的位置指针,如果不存在则返回NULL

    char *strchr(const char *str, int c)
    

    在参数 str 所指向的字符串中搜索第一次出现字符 c(一个无符号字符)的位置。

    函数实现:

    char* My_strchr(char *s, char c)
    {
        while(*s != '' && *s != c)
        {
            ++s;
        }
        return *s==c ? s : NULL;
    }
    

    示例:

    #include <string.h>
    #include <stdio.h>
    int main(void)
    {
        char string[20] = "This is a string";
        char *ptr1, *ptr2;
        char c1 = 'r', c2 = 'b';
    
        ptr1 = strchr(string, c1);
        ptr2 = strchr(string, c2);
    
        if(ptr1)
            printf("字符1:%c 的位置是: %s 
    ",c1,ptr1);
        else
            printf("字符1:%c 未找到 
    ", c1);
    
        if(ptr2)
            printf("字符2:%c 的位置是: %s 
    ",c2,ptr2);
        else
            printf("字符2:%c 未找到 
    ", c2);
    
        return 0;
    }
    

    输出结果:

    strcmp

    字符串比较

    int strcmp(const char *str1, const char *str2)
    

    把 str1 所指向的字符串和 str2 所指向的字符串进行比较。

    设这两个字符串为str1,str2,
    若str1=str2,则返回零;
    若str1<str2,则返回负数;
    若str1>str2,则返回正数。

    函数实现:

    int Strcmp(char const *s1, char const *s2)
    {
    	assert(s1&&s2);
    	while (*s1 == *s2 && *s1 != '' && *s2 != '')
    	{
    		s1++;
    		s2++;
    	}
    	if (*s1 == *s2)
    	{
    		return 0;
    	}
    	else if (*s1 > *s2)
    	{
    		return 1;
    	}
    	return -1;
    }
    

    示例:

    #include <string.h>
    #include <stdio.h>
    int main(void)
    {
        char str1[20] = "abc";
        char str2[20] = "abc";
        char str3[20] = "bbc";
    
        int r1, r2, r3;
    
        r1 = strcmp(str1, str2);
        r2 = strcmp(str1, str3);
        r3 = strcmp(str3, str1);
    
        printf("r1 = %d, r2 = %d, r3 = %d 
    ", r1, r2, r3);
    
        return 0;
    }
    

    输出结果:

    strstr

    字符串查找

    char *strstr(const char *haystack, const char *needle)
    

    在字符串 haystack 中查找第一次出现字符串 needle(不包含空结束字符)的位置。

    函数实现:

    char *Strstr(char const *s1, char const *s2)
    {
    	assert(s1&&s2);
    	const char *ps1, *ps2;
    	ps1 = s1;
    	ps2 = s2;
    	while (*ps1)
    	{
    		const char *tmp = ps1;
    		while (*tmp++ == *ps2++);
    		if (*ps2 == '')
    		{
    			return (char*)ps1;
    		}
    		ps2 = s2;
    		ps1++;
    	}
    	return NULL;
    }
    

    strncmp

    int strncmp(const char *str1, const char *str2, size_t n)
    

    把 str1 和 str2 进行比较,最多比较前 n 个字节。

    函数实现:

    int Strncmp(char const *s1, char const *s2, int len)
    {
    	assert(s1&&s2);
    	while (len-- && *s1 == *s2 && *s1 != '' && *s2 != '')
    	{
    		s1++;
    		s2++;
    	}
    	return *s1 - *s2;
    }
    

    memcpy

    内存复制

    void *memcpy(void *dest, const void *src, size_t n)
    

    从 src 复制 n 个字符到 dest。

    函数实现

    void *Memcpy(char *dst, char const *src, int len)
    {
    	assert(dst && src);
    	char *tmp = dst;
    	const char *s = src;
    	while (len--)
    	{
    		*dst++ = *src;
    	}
    	return tmp;
    }
    

    Jlink使用技巧系列文章:


    欢迎大家关注我的个人博客

    或微信扫码关注我的公众号

  • 相关阅读:
    C# 获取计算机相关信息
    C# 创建Windows服务demo
    C# 嵌入互操作类型
    使用开源框架Sqlsugar结合mysql开发一个小demo
    C# 实现最小化托盘功能
    面试-PA和XSYX面试小结
    0103-springmvc的基本流程
    0102-aop
    java并发编程-12个原子类
    ej3-0开端
  • 原文地址:https://www.cnblogs.com/whik/p/10302691.html
Copyright © 2011-2022 走看看