欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

str系列源码小结

程序员文章站 2023-12-22 22:10:28
...

1、strcmp

  ①、原形:int strcmp(const char * str1, const char * str2)
  ②、功能:比较两个字符串的大小
  ③、代码

#include<stdio.h>
#include<assert.h>

int my_strcmp(const char* str1,const char* str2);

int main()
{
    int ret = 0;
    char* str1 = "hellx";
    char* str2 = "hellw";

    ret = my_strcmp(str1,str2);

    if(ret > 0)
    {
        printf("%s > %s\n",str1,str2);
    }
    else if(ret < 0)
    {  
        printf("%s < %s\n",str1,str2);    
    }
    else
    {
        printf("equal!\n");
    }

    return 0;
}
int my_strcmp(const char* str1,const char* str2)
{
    assert(str1 != NULL && str2 != NULL);

    while(*str1 == *str2)
    {
        str1++;
        str2++;
    }

    return(*str1 - *str2);
}

2、strncmp

  ①、原形:int strncmp(const char * str1, const char * str2, int count)
  ②、功能:比较两个字符串中前count个字节的大小
  ③、代码

//比较两个字符串中前count个字节的大小
#include<stdio.h>
#include<assert.h>

int my_strncmp(const char* str1,const char* str2, int count);

int main()
{
    int ret = 0;
    int count = 5;
    char* str1 = "hellx";
    char* str2 = "hellw";

    ret = my_strncmp(str1,str2,count);

    if(ret > 0)
    {
        printf("前%d字符中:%s > %s\n",count,str1,str2);
    }
    else if(ret < 0)
    {  
        printf("前%d字符中:%s < %s\n",count,str1,str2);    
    }
    else
    {
        printf("equal!\n");
    }

    return 0;
}
int my_strncmp(const char* str1,const char* str2, int count)
{
    assert(str1 != NULL && str2 != NULL);

    if(!count)
    {
        return 0;
    }

    while((--count) && ((*str1++) == (*str2++)));

    return(*str1 - *str2);
}

3、strcpy

  ①、原形:void strcpy(char * destin, const char * source)
  ②、功能:把source指向的字符串拷贝到destin指向的字符串中
  ③、代码

//将source字符串拷贝到dest

#include<stdio.h>
#include<assert.h>

void my_strcpy(char* dest,char* source);

int main()
{
    char str1[] = {0};
    char* str2 = "helloworld!";

    my_strcpy(str1,str2);
    puts(str1);

    return 0;
}

void my_strcpy(char* dest,char* source)
{
    assert(dest != NULL && source != NULL);  //断言

    while((*dest++ = *source++));
}

4、strncpy

  ①、原形:void strncpy(char * destin, const char * source,int count)
  ②、功能:把source指向的字符串中前count个字符拷贝到destin指向的字符串中
  ③、代码

/将source中的count个字符复制到dest中

#include<stdio.h>
#include<assert.h>

void my_strncmp(char* dest,char* source,int count);

int main()
{
    char str1[] = {0};
    char *str2 = "hello world";
    int count = 13;

    my_strncmp(str1,str2,count);

    puts(str1);

    return 0;
}

void my_strncmp(char* dest,char* source,int count)
{
    assert((dest != NULL) && (source != NULL));

    while((count--) && (*dest++ = *source++));

}

5、strcat

  ①、原形:void strcat(char* dest, const char *source)
  ②、功能:将source中的字符串拼接到dest中
  ③、代码:

//拼接字符串
#include<stdio.h>
#include<assert.h>

void my_strcat(char* dest,const char* source);

int main()
{
    char str1[] = "hello";
    char* str2 = "world!";
    char* s = " ";

    my_strcat(str1,s);
    my_strcat(str1,str2);
    puts(str1);

    return 0;
}

void my_strcat(char* dest,const char* source)
{
    assert(dest != NULL && source != NULL);

    while(*dest)
    {
        dest++;
    }
    while((*dest++ = *source++));
}

6、strlen

  ①、原形:unsigned int strlen(const char * str)
  ②、功能:计算字符串长度
  ③、代码

#include<stdio.h>
#include<assert.h>

unsigned int my_strlen(const char* str);

int main()
{
    unsigned int len = 0;
    char* str = "helloworld!";

    len = my_strlen(str);
    printf("字符串%s的长度为:%u \n",str,len);

    return 0;
}

unsigned int  my_strlen(const char* str)
{
    unsigned int len = 0;
    while(*str != '\0')
    {
        len++;
        str++;
    }

    return len;
}

7 、strchr

  ①、原形:char * strchr(char * str, const char ch)
  ②、功能:返回字符ch第一次出现的位置
  ③、代码:

//返回字符第一次出现的位置

#include<stdio.h>
#include<assert.h>

char* my_strchr(char* str,const char c);

int main()
{
    char* str = "hello";
    char c = 'l';
    char *p = NULL;

    p = my_strchr(str,c);

    if(!p)
    {
        printf("Not find!\n");
    }
    else
    {
        printf("in %s,%c located:%p \n",str,c,p);
    }

    return 0;
} 
char* my_strchr( char* str,const char c)
{
    assert(str != NULL);
    char* temp = str;
    while(*temp && (*temp != c))
    {
        temp++;
    }

    return ((*temp == c) ? temp : NULL);
}

8、strrchr

  ①、原形:char * strrchr(char * str, const char ch)
  ②、功能:返回字符ch最后一次出现的位置
  ③、代码

#include<stdio.h>
#include<assert.h>

char* my_strrchr(char* str,const char c);

int main()
{
    char* str = "hello";
    char c = 'l';
    char *p = NULL;

    p = my_strrchr(str,c);

    if(!p)
    {
        printf("Not find!\n");
    }
    else
    {
        printf("in %s,%c located:%p \n",str,c,p);
    }

    return 0;
} 
char* my_strrchr( char* str,const char c)
{
    assert(str != NULL);
    char* temp = str;
    while(*temp)
    {
        temp++;
    }
    while((temp != str) && (*temp != c))
    {
        temp--;
    }

    return ((*temp == c) ? temp : NULL);
}

9、strdup

  ①、原形:char * strdup(const char * str)
  ②、功能:拷贝字符串到新申请的内存
  ③、代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>

char* my_strdup(const char* str);

int main()
{
    char* str = "helloworld";

    char* temp = my_strdup(str);
    puts(temp);

    free(temp);

    return 0;
}

char* my_strdup(const char* str)
{
    char* temp = malloc(sizeof(char) * (strlen(str) + 1));
    assert(str != NULL && temp != NULL);
    strcpy(temp,str);

    return temp;
}

10、strrev

  ①、原形:void strrev(char * str);
  ②、功能:翻转字符串
  ③、代码

//翻转字符串
#include<stdio.h>
#include<assert.h>

void my_strrev(char* str);
int main()
{
    char str[] = "hello";

    my_strrev(str);

    puts(str);

    return 0;
}

void my_strrev(char* str)
{
    char* end = str;

    while(*end++);
    end--;   //与end++抵消
    end--;   //跳过'\0'

    while(str < end)
    {
        char temp;
        temp = *str;
        *str++ = *end;
        *end-- = temp;
    }
}
相关标签: 源码 str

上一篇:

下一篇: