10. C语言string库函数有strlen,strcpy,strcmp,strcat,strstr实现
程序员文章站
2024-03-24 23:58:16
...
string.h 是C语言标准库中一个常用的头文件,在使用到字符数组时需要使用。
常用函数有strlen,strcpy,strcmp,strcat,strstr等等,更详细的可以到include文件夹里面查看该文件。
1.strlen
功能:求字符串长度, \0 停止查找。
实现方式:计数器,递归,指针减法。
//1.计数器实现
int strlen(const char* ptr)
{
// 非法输入
if(ptr == NULL)
{
return -1;
}
int count = 0;
while (*(ptr++))
count++;
return count;
}
//2.递归实现
int strlen(char* ptr)
{
// 非法输入
if(ptr == NULL)
{
return -1;
}
if (*ptr != '\0')
return my_strlen(ptr + 1)+1;
return 0;
}
//3.指针运算实现
int strlen(char* ptr)
{
// 非法输入
if(ptr == NULL)
{
return -1;
}
char* pc = ptr;
while (*pc)
pc++;
return pc - ptr;
}
2. strcpy
功能:字符串拷贝。
把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间。src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
char* strcpy(char* dest, const char* src)
{
char* tmp = src;
// 非法输入
if (dest == NULL || src == NULL) {
return NULL;
}
while ((*(dest++) = *(tmp++))){};
return dest;
}
3.strcmp
功能:字符串比较。
返回值:两个字符串相等返回0,不等,则判断短串最后一位字符的ASCII值与长串相同位ASCII值的大小,str1大,返回值一个大于零的数,str1小,返回一个小于零的数。
int strcmp(const char* str1, const char* str2)
{
// 非法输入
if(str1==NULL || str2==NULL)
{
return NULL;
}
while (*str1 == *str2)
{
if (*str1 == '\0')
return 0;
str1++;
str2++;
}
return *str1 - *str2;
}
4.strcat
功能:字符串连接。
char* strcat(char* dest,const char* src)
{
// 非法输入
if(dest==NULL || src==NULL)
{
return NULL;
}
char* ret = dest;
// while (*++dest);
// 单一 前置++ 也有问题,如果是一个空串,则直接结束
while (*dest)
{
dest++;
}
while (*dest++ = *src++);
return ret;
}
5.strstr
功能:查找子字符串。
在一个字符串中查找一个字符串,返回一个指针为这个子串第一次在母串中出现的位置。
char* strstr(const char* str, const char* substr)
{
// 非法输入
if(str==NULL || substr==NULL)
{
return NULL;
}
const char* s1 = str;
const char* s2 = substr;
const char* cp = str;
//查找的子串为空,返回母串
if (!*substr)
return (char*)str;
while (*cp)
{
cp = s1;
while (*s1 && *s2 && (*s1 == *s2))
{
s1++;
s2++;
}
if (!*s2)
return (char*)cp;
s1 = ++cp;
}
return NULL;
}
上一篇: iOS 蓝牙/BLE4.0
下一篇: 链表实现队列出队和入队