C语言中经常要对字符和字符串进行处理,但是在C语言中没有专门的字符类型,一般将字符或者字符函数存储在常量字符串或者字符数组中,字符串常量适合存储那些不修改的字符串函数,我们知道在C语言中最小的一个单位是一个bit,而字符的最小单位是8个bit称为一个字节,因此字符的最小单位为字节。我们同过模拟查找一个字符数组是否是另一个字符数组的子串(strstr)函数来学习字符函数,即字符串str[30]=“abfbfgde”, arr=“bfgde”,若arr是str的子字符串则返回str中bfgde的b的首地址不是则返回null(空地址)。
strstr模拟实现的代码:
#include<stdio.h>
#include<string.h>
#include<assert.h>
char* my_strstr(const char* str1, const char* str2)
{
assert(str1&&str2);
char* cp = (char*)str1;
char* substr = (char*)str2;
char* s1 = NULL;
if (str2 == '\0')
return NULL;
while (*cp)
{
s1 = cp;
substr = (char*)str2;
while((*s1)&&(*str2) && (*s1 == *substr))
{
s1++;
substr++;
}
if (*substr == '\0')
return cp;
cp++;
}
return NULL;
}
int main()
{
char str[60] = "abfbfgde";
char arr[] = "bfgd";
char* temp = my_strstr(str, arr);
printf("%s\n", temp);
return 0;
}
程序注释图
程序运行结果图