字符串函数

简要

        在C语言中,有一系列用于操作字符串的函数,称之为字符串函数,使用时可以调用<string.h>头文件(也有一系列字符分类函数,使用时调用<ctype.h>头文件>。

strlen()函数

        首先我们要明白,一个字符串是以'\0'为结束标志,strlen()函数就是返回字符串在'\0'之前的字符的个数(千万记住,不含'\0'),而且函数的返回值是size_t类型。

        在msdn上给出的解释如上,传入的参数是一个常量指针,表明指针指向的内容不可以修改,因为我们只是计算一下这个字符串的长度,自然也不能擅自修改字符串,所以用const来修饰。

        下面,模拟实现一下strlen()函数。

1.计数器法。

size_t my_strlen1(const char* str)
{
	size_t count = 0;
	assert(str);
	while (*str)
	{
		count++;
		str++;
	}
	return count;
}

        通过一个变量来记录遍历过的字符,到'\0'停止,计算出字符串的有效长度。

2.递归

size_t my_strlen2(const char* str)
{
	assert(str);
	if (!*str)
		return 0;
	else
		return 1 + my_strlen2(str + 1);
}

3.指针-指针

size_t my_strlen3(char* str)
{
	assert(str);
	char* start = str;
	while (*start)
	{
		start++;
	}
	return start - str;
}

strcpy()函数

        使用这个函数,需要保证目标空间足够大,目标空间可修改。这是msdn对strcpy()的解释。

        可以看出strcpy()函数的返回值类型是char*。

实现strcpy()函数

        

char* my_strcpy(char* str1, const char* str2)
{
	char* ret = str1;
	assert(str1 && str2);
	while (*str1++ = *str2++);
	return ret;
}

strcat()函数

        要求目标字符串内有'\0',不然无法追加,而且目标空间要足够大。

strcat()函数的实现

char* my_strcat(char* str1, const char* str2)
{
	char* ret = str1;
	assert(str1 && str2);
	while (*str1)
	{
		str1++;
	}
	while (*str1++ = *str2++);
	return ret;
}

strstr()函数

        这个函数的返回值是字符串2在字符串1中第一次出现的位置(指针的形式)。

        先来看一下这个函数的效果。

如果找不到,就会返回一个NULL。

strstr()函数的实现

char* my_strstr(const char* str1, const char* str2)
{
	char* p = str1,*s1,*s2;
	if (!*str2)
		return (char*)str1;
	while (*p)
	{
		s1 = p;
		s2 = (char*)str2;
		while (*s1 && *s2 && !(*s1 - *s2))
			s1++, s2++;
		if (!*s2)
			return p;
		p++;
	}
	return NULL;
}

strtok()函数

        

        这个函数,如果他的第一个参数不是NULL,那么它将找到str中第一个标记,strtok函数会保留他的位置,如果是NULL,函数将在同一个字符串被保存的位置开始,查找下一个标记。如果没有标记了,就返回NULL指针。

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <assert.h>


int main()
{
	char str[] = "66612.2@com";
	char* sep1 = ".@";
	char* p = NULL;
	for (p = strtok(str, sep1); p != NULL; p = strtok(NULL, sep1))
	{
		printf("%s\n", p);
	}
	return 0;
}

strerror()函数

这个函数是把参数部分错误码对应的错误信息的字符串地址返回。

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <assert.h>


int main()
{
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		printf("%s\n", strerror(i));
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值