目录
字符串内置函数
C语言中除了之前讲过的基本数据类型之外,还有两个常用的结构:数组与字符串。事实上C语言本身是没有字符串类型的,字符串通常放在常用字符串中或字符数组中。字符串常量适用于那些不对其做出改变的字符串函数。字符串通常需要以’\0’作为其结束的标志符,针对字符串独特的结构特点,string库给出了一系列功能的库函数。以下介绍一些基本内置函数的使用方法以及模拟功能写法。
函数的功能及模拟
strlen
strlen函数介绍
strlen 的主要功能是求得字符串的长度,当然,从字符长度的第一个元素开始,到’\0’为止,但是却不包括’\0’,这一点尤其需要注意。MSDN中对其函数作了以下声明:
size_t strlen( const char *string );
该函数要求传入一个字符型的指针,且其中内容不可被修改,返回一个size_t(即unsigned int)类型的值,即长度。
例如以下代码:
char arr[] = "abcdefg";
int length = strlen(arr);
printf("the arr length is %d\n", length);
其运行的值正如我们所需要计算的那样一共有七个字符长度:
strlen函数模拟
具体代码如下:
int my_strlen(const char *str)//strlen的模拟实现
{
const char *str_c = str;//保护指针
int count = 0;
assert(str != NULL);//断言,保证指针不为空
while (*str_c != '\0')
{
count++;
str_c++;
}
return count;//返回长度的数值
}
通过字符串首地址,按照其连续存储的特点对其元素依次访问直至’\0’结束。
strcpy
strcpy函数介绍
strcpy的主要功能是将一个字符串的内容完全复制到目标空间中,包括’\0’,其要求目标空间有足够大的空间用以接收源字符串。MSDN中对其函数作的声明如下:
char *strcpy( char *strDestination, const char *strSource );
其要求传入两个地址,第一个为目标字符串的首地址,第二个是需要进行复制的源地址,要求源地址中的数据只可访问而不可进行修改,返回的同样是地址。
例如:
char arr[100] = "abcdefg";
char arr_s[] = "strcpy function";
char* pp= strcpy(arr,arr_s);
printf("the final string is >%s\n", pp);
其输出的值为:
strcpy函数模拟
char *my_strcpy(char *strD, const char *strS)
{
assert(strD != NULL && strS != NULL);
char* strd = strD;
const char* strs = strS;
while (*strs != '\0')
{
*strd++ = *strs++;
}
*strd = '\0';
return strD;
}
strcat
strcat函数介绍
该函数主要功能实现两个字符串的拼接,MSDN给出声明:
char *strcat( char *strDestination, const char *strSource );
参数类型与返回值将不再赘述
程序功能例如:
char arr[100] = "I like ";
char arr_s[] = "strcat function";
char* pp= strcat(arr,arr_s);
printf("the final string is >%s\n", pp);
程序结果:
strcat函数模拟
char *my_strcat(char *strD, const char *strS)
{
assert(strD != NULL && strS != NULL);
char* strd = strD;
const char* strs = strS;
while (*strd != '\0')
{
strd++;
}
while (*strs != '\0')
{
*strd++ = *strs++;
}
*strd = '\0';
return strD;
}
strcmp
strcmp功能
在百度百科上我们可以显而易见的找出strcmp的功能:strcmp函数是string compare(字符串比较)的缩写,用于比较两个字符串并根据比较结果返回整数。基本形式为strcmp(str1,str2),若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数。有了这种判断的依据和标准就可以自己进行模拟函数写法。
首先先看一下库函数给出的使用方法:
int main()
{
char str[] = "wocai xuexi hhhhh";
char str1[] = "who like c";
int res = strcmp(str, str1);
if (res > 0)
printf("str>str1\n");
else if (res < 0)
printf("str<str1\n");
else
printf("str=str1\n");
return 0;
}
则输出形如:
strcmp函数模拟
int my_strcmp(const char *str1, const char *str2)//strcmp的模拟实现
{
assert(str1 != NULL && str2 != NULL);
const char* s1 = str1;
const char* s2 = str2;
int result;
while (*s1 != '\0' || *s2 != '\0')
{
if (*s1 - *s2 != 0)
break;
s1++;
s2++;
}
result = *s1 - *s2;
return result;
}