目录

1.strlen函数

2.strcpy函数

3.strcat函数

4.strncat函数

5.strcmp函数

6.strimp函数

7.strncmp函数

拓展:

(1)strnicmp函数

(2)strcasecmp函数

(3)strncasecmp函数

8.strchr函数

9.strrchr函数

10.strcspn函数

11.strspn函数

12.strdup函数

13.strrev函数

14.strstr函数

15.strtok函数

拓展:

(1)strtok_s函数

(2)strtok_r函数

16.strpbrk函数

17.substr函数——s.substr(l, r)


1.strlen函数

原型:size_t strlen(const char *str)

功能:返回字符串str的长度(不包括'\0')。

实现如下:

size_t my_strlen(const char *str)
{
	assert(str != NULL);
	int count = 0;
	while (*str != '\0')
	{
		count++;
		str++;
	}
	return count;
}

2.strcpy函数

原型:char *strcpy(char *dest, const char *src)

功能:strcpy为覆盖拷贝,将src所指向的内容全覆盖拷贝到dest。

实现如下:

void my_strcpy(char *dest, const char *src)
{
	while (*src)
	{
		*dest = *src;
		++src;
		++dest;
	}
	*dest = '\0';
}

3.strcat函数

原型:char* strcat(char *dest, const char *src)

功能:功能为连接两个字符串,把src连接到dest后面;返回dest地址。

实现如下:

char *my_strcat(char *dest,const char *src)
{
	char* addr=dest;
	while(*dest)//
	{
		dest++;
	};
	while(*dest++=*src++)
	{};
	return addr;
}

4.strncat函数

原型:char *strncat(char *dest, const char *src, int n)

功能:指定长度,追加拷贝,将src指向的字符串的前n个字符追加拷贝到dest指向的字符串后面。

实现如下:

char *my_strncat(char *dest, const char *src, int n)
{
	char* ret = dest;
	assert(dest != NULL && src != NULL);
	while (*dest != '\0')
		dest++;
	while (n && (*dest++ = *src++) != '\0')
		n--;
	*dest = '\0';
	return ret;
}

5.strcmp函数

原型:int strcmp(const char *str1, const char *str2)

功能:比较两个字符串的大小,一个字符一个字符比较,按ASCLL码比较。
标准规定:
第一个字符串大于第二个字符串,则返回大于0的数字
第一个字符串等于第二个字符串,则返回0
第一个字符串小于第二个字符串,则返回小于0的数字

实现如下:

int my_strcmp(const char *str1, const char *str2)
{
	while(*str1==*str2)
	{
		if(*str1=='\0')
			return 0;
		str1++;
		str2++;
	}
	return *str1-*str2;
}

6.strimp函数

原型:int stricmp(const char *str1, const char *str2)

功能:比较字符串str1和str2,按ASCLL码比较,但不区分字母的大小写。
当str1<str2时,返回值<0
当str1=str2时,返回值=0
当str1>str2时,返回值>0

实现如下:

int my_strcmp(const char *str1, const char *str2)
{
	while(*str1==*str2||(*str1+32)==*str2||(*str1-32)==*str2)
	{
		if(*str1=='\0')
			return 0;
		str1++;
		str2++;
	}
	return *str1%97-*str2%97;
}

7.strncmp函数

原型:int strncmp(const char *str1, const char *str2,int n)

功能:比较字符串str1和str2的前n个字符串,按ASCLL码比较。
当str1<str2时,返回值<0
当str1=str2时,返回值=0
当str1>str2时,返回值>0

实现如下:

int my_str_ncmp(const char * str1, const char * str2, int n)
{
	if (NULL == str1 || NULL == str2 || n <= 0)
	{
		exit(EXIT_FAILURE);
	}
	char* pos1 = NULL;
	char* pos2 = NULL;
	pos1 = str1;
	pos2 = str2;
	int ret = 0;
	while (0 != n && (*pos1 == *pos2))
	{
		++pos1;
		++pos2;
		--n;
	}
	ret = *pos1 - *pos2;
	if (0 == ret)
		return 0;
	else if (ret < 0)
		return -1;
	else
		return 1;
}

拓展:

(1)strnicmp函数

原型:int strnicmp(const char *str1, const char *str2,int n)

功能:比较字符串str1和str2的前n个字符串,按ASCLL码比较,但不区分字母的大小写。
当str1<str2时,返回值<0
当str1=str2时,返回值=0
当str1>str2时,返回值>0

(2)strcasecmp函数

Linux下特有函数,功能相当于stricmp函数

(3)strncasecmp函数

Linux下特有函数,功能相当于strnicmp函数

8.strchr函数

原型:char *strchr(char *str, char c)

功能:查找str中首次出现c的位置,如有有,则返回出现位置,否则返回NULL。

实现如下:

char *my_strchr(char *str, char c)
{
	while(*str!='\0'&&*str!=c)
	{
		str++;
	}
	return (*str==c? str: NULL);
}

9.strrchr函数

原型:char *strrchr(char *str, char c)

功能:查找str中最后一次出现c的位置,如有有,则返回出现位置,否则返回NULL。

实现如下:

char *my_strrchr(char *str, char c)
{
	char *p=str+strlen(str);//p指向最后一个字符
	while(p!=str&&*p!=c)
	p--;
	if(p==str&&*p!=c)
		return NULL;
	else return p;
}

10.strcspn函数

原型:size_t strcspn(const char *pstr, const char *strCharset)

功能:用于检索pstr开头连续有几个字符不包含于strCgarset中。

实现:https://blog.csdn.net/chenyu2202863/article/details/5293941

11.strspn函数

原型:size_t strspn(const char *pstr, const char *strCharset)

功能:用于检索pstr开头连续有几个字符包含于strCgarset中。

12.strdup函数

原型:char* strdup(const char* str)

功能:拷贝字符串到新建的内存,返回内存指针。若失败,返回NULL。(返回的指针指向的内存在堆中,需要手动释放。)

实现如下:

char *my_strdup(const char *str)
{
	char *p=NULL;
	if(str&&(p=(char*)malloc(strlen(str)+1)))
		strcpy(p,str);
	return p;

13.strrev函数

原型:char *strrev(char *str)

功能:反转字符串,返回字符串指针。

实现如下:

char *my_strrev(char *str)
{
	if(str==NULL)
		return NULL;
	char *start=str;
	char *end=str+strlen(str)-1;
	char temp;
	while(start<end)
	{
		temp=*start;
		*start=*end;
		*end=temp;
		start++;
		end--;
	}
	return str;
}

14.strstr函数

原型:char *strstr(const char str1, const char *str2)

功能:在字符串str1中查找是否含有字符串str2,如果存在,返回str2在str1中第一次出现的地址;否则返回NULL。

实现如下:

char *my_strstr(const char str1, const char *str2)
{
	int length1=strlen(str1);
	int length2=strlen(str2);
	while(length1>=length2)
	{
		length1--;
		if(!strncpy(str1,str2,length2))//比较前n个字符串,类似strcpy
			return str1;
		str1++;
	}
	return NULL;
}

15.strtok函数

原型:char *strtok(char *str, const char *delim)

功能:在str指向的字符串中检索包含于delim所指向的字符串中的字符,并对str进行分割;返回str被分解的第一个子字符串,若无可检索的字符串,则返回NULL。

实现如下:

char *my_strtok(char *str,const char *delim)
{
    static char *next_start = NULL; 

    if(str == NULL && (str = next_start) == NULL)
    {
        return NULL;
    }

    char       *s = str;
    const char *t = NULL;

    while(*s)
    {
        t = delim;

        while(*t)
        {
            if(*t == *s)
            {
                next_start = s + 1;

                if(s == str) 
                {
                    str = next_start;
                    break;
                }
                else
                {
                    *s = '\0';
                    return str;
                }
            }
            else
            {
                t++;
            }
        }

        s++;
    }

    return NULL;
}

拓展:

(1)strtok_s函数

原型:char *strtok_s( char *strToken, const char *strDelimit, char **buf)

strtok_s是windows下的一个分割字符串安全函数,这个函数将剩余的字符串存储在buf变量中,而不是静态变量中,从而保证了安全性。

(2)strtok_r函数

原型:char *strtok_r(char *str, const char *delim, char **saveptr)

strtok_s函数是linux下分割字符串的安全函数,该函数也会破坏待分解字符串的完整性,但是其将剩余的字符串保存在saveptr变量中,保证了安全性。

16.strpbrk函数

原型:char * strpbrk(const char *str1,const char *str2)

功能:从str1的第一个字符向后检索,直到'\0',如果当前字符存在于str2中,那么返回当前字符的地址,并停止检索;若str1、str2中无相同的字符,则返回NULL。

实现如下:

char * strpbrk(const char * cs,const char * ct)
{
	const char *sc1,*sc2;
 
	for( sc1 = cs; *sc1 != '\0'; ++sc1) {
		for( sc2 = ct; *sc2 != '\0'; ++sc2) {
			if (*sc1 == *sc2)
				return (char *) sc1;
		}
	}
	return NULL;
}

17.substr函数——s.substr(l, r)

功能:用于截取字符串,从第l个截取至第r个

【例】

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string s;
	cin >> s;
	string t = s.substr(2, 5);
	cout << t;
	return 0;
}

6dd4af0167dc4826a2a3366079f99624.png

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐