C的string.h里有没有字符串替换函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C的string.h里有没有字符串替换函数相关的知识,希望对你有一定的参考价值。
参考技术A 1.函数名: stpcpy功 能: 拷贝一个字符串到另一个
2.函数名: strcat
功 能: 字符串拼接函数
3.函数名: strchr
功 能: 在一个串中查找给定字符的第一个匹配之处\
4.函数名: strcmp
功 能: 串比较
5.函数名: strncmpi
功 能: 将一个串中的一部分与另一个串比较, 不管大小写
6.函数名: strcpy
功 能: 串拷贝
7.函数名: strcspn
功 能: 在串中查找第一个给定字符集内容的段
8.函数名: strdup
功 能: 将串拷贝到新建的位置处
9.函数名: stricmp
功 能: 以大小写不敏感方式比较两个串
10.函数名: strerror
功 能: 返回指向错误信息字符串的指针
11函数名: strcmpi
功 能: 将一个串与另一个比较, 不管大小写
12函数名: strncmp
功 能: 串比较
13函数名: strncmpi
功 能: 把串中的一部分与另一串中的一部分比较, 不管大小写
14函数名: strncpy
功 能: 串拷贝
15函数名: strnicmp
功 能: 不注重大小写地比较两个串
16函数名: strnset
功 能: 将一个串中的所有字符都设为指定字符
17函数名: strpbrk
功 能: 在串中查找给定字符集中的字符
18函数名: strrchr
功 能: 在串中查找指定字符的最后一个出现
19函数名: strrev
功 能: 串倒转
20函数名: strset
功 能: 将一个串中的所有字符都设为指定字符
21函数名: strspn
功 能: 在串中查找指定字符集的子集的第一次出现
22函数名: strstr
功 能: 在串中查找指定字符串的第一次出现
23函数名: strtod
功 能: 将字符串转换为double型值
24函数名: strtok
功 能: 查找由在第二个串中指定的分界符分隔开的单词
25函数名: strtol
功 能: 将串转换为长整数
26函数名: strupr
功 能: 将串中的小写字母转换为大写字母
27函数名: swab
功 能: 交换字节
重写C语言string.c的部分函数
一、string.c里相关函数介绍
string.h里主要包含了C语言对字符串操作的相关函数,这篇文章就介绍几个比较常用的
函数重新自己实现。并且每个函数给出了2种以上的不同写法,全部采用指针方式;在学习C语言过程中,重写这些字符串处理函数可以快速提升、磨练自己的指针、数组、函数相关知识,对学习是非常有帮助的;在单片机、嵌入式开发中,也会经常需要自己实现这些函数,可能有些功能系统函数不能满足的情况下,都需要自己重新实现。
二、重写函数介绍
2.1 strcmp : 字符串比较
字符串比较函数,用来比较两个字符串是否相等,下面给出了4种写法,其中一个是strncmp函数。
int strcmp(const char *str1, const char *str2)
{
const unsigned char *s1 = (const unsigned char *)str1;
const unsigned char *s2 = (const unsigned char *)str2;
int delta = 0;
while (*s1 || *s2) {
delta = *s2 - *s1;
if (delta)
return delta;
s1++;
s2++;
}
return 0;
}
int strncmp(const char *cs, const char *ct, size_t count)
{
unsigned char c1, c2;
while (count) {
c1 = *cs++;
c2 = *ct++;
if (c1 != c2)
return c1 < c2 ? -1 : 1;
if (!c1)
break;
count--;
}
return 0;
}
int strcmp(const char *a, const char *b)
{
while (*a || *b) {
if (*a != *b)
return 1;
if (*a == 0 || *b == 0)
return 1;
a++;
b++;
}
return 0;
}
int strcmp(const char *cs, const char *ct)
{
unsigned char c1, c2;
int res = 0;
do {
c1 = *cs++;
c2 = *ct++;
res = c1 - c2;
if (res)
break;
} while (c1);
return res;
}
2.2 strlen: 字符串长度介绍
strlen是计算字符串长度的函数,比较常用,代码也最简单,下面写了两种实现方法。
size_t strlen(const char *s)
{
const char *sc = s;
while (*sc != '\\0')
sc++;
return sc - s;
}
size_t strlen(const char *s)
{
const char *sc;
for (sc = s; *sc != '\\0'; ++sc)
return sc - s;
}
size_t strnlen(const char *s, size_t count)
{
const char *sc;
for (sc = s; count-- && *sc != '\\0'; ++sc)
return sc - s;
}
2.3 strstr: 字符串查找
strstr字符串查找函数,用来查找指定的字符串在源字符串里是否存在,存在就返回地址。
这个就给出了一种写法。
char *strstr(const char *s1, const char *s2)
{
size_t l1, l2;
l2 = strlen(s2);
if (!l2)
return (char *)s1;
l1 = strlen(s1);
while (l1 >= l2) {
l1--;
if (!memcmp(s1, s2, l2))
return (char *)s1;
s1++;
}
return NULL;
}
2.4 memcmp : 内存比较
memcmp内存比较函数,用来比较两个内存地址里的数据是否相等,不局限于字符串,只要是合法内存都可以按字节比较。
int memcmp(const void *cs, const void *ct, size_t count)
{
const unsigned char *su1 = cs, *su2 = ct, *end = su1 + count;
int res = 0;
while (su1 < end) {
res = *su1++ - *su2++;
if (res)
break;
}
return res;
}
int memcmp(const void *cs, const void *ct, size_t count)
{
const unsigned char *su1, *su2;
int res = 0;
for (su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--)
if ((res = *su1 - *su2) != 0)
break;
return res;
}
2.5 strcpy :字符串拷贝
strcpy字符串拷贝函数,用来将目标字符串拷贝到指定的地址中。目标字符串必须是‘\\0’结束。 这里写了2种函数,一个strcpy、一个strncpy。
char *strcpy(char *dest, const char *src)
{
char *tmp = dest;
while ((*dest++ = *src++) != '\\0')
return tmp;
}
char *strncpy(char *dest, const char *src, size_t count)
{
char *tmp = dest;
while (count) {
if ((*tmp = *src) != 0)
src++;
tmp++;
count--;
}
return dest;
}
size_t strlcpy(char *dest, const char *src, size_t size)
{
size_t ret = strlen(src);
if (size) {
size_t len = (ret >= size) ? size - 1 : ret;
memcpy(dest, src, len);
dest[len] = '\\0';
}
return ret;
}
2.6 内存拷贝: memcpy
内存拷贝函数,将目标内存数据拷贝导致指定内存位置,不局限于字符串。
void *memcpy(void *__dest, __const void *__src, size_t __n)
{
int i = 0;
unsigned char *d = (unsigned char *)__dest, *s = (unsigned char *)__src;
for (i = __n >> 3; i > 0; i--) {
*d++ = *s++;
*d++ = *s++;
*d++ = *s++;
*d++ = *s++;
*d++ = *s++;
*d++ = *s++;
*d++ = *s++;
*d++ = *s++;
}
if (__n & 1 << 2) {
*d++ = *s++;
*d++ = *s++;
*d++ = *s++;
*d++ = *s++;
}
if (__n & 1 << 1) {
*d++ = *s++;
*d++ = *s++;
}
if (__n & 1)
*d++ = *s++;
return __dest;
}
void *memcpy(void *__dest, __const void *__src, size_t __n)
{
int i;
char *d = (char *)__dest, *s = (char *)__src;
for (i = 0; i < __n; i++)
d[i] = s[i];
return __dest;
}
static inline void *memcpy(void *__dest, const void *__src, size_t __n)
{
int i;
const char *s = __src;
char *d = __dest;
for (i = 0; i < __n; i++)
d[i] = s[i];
return __dest;
}
以上是关于C的string.h里有没有字符串替换函数的主要内容,如果未能解决你的问题,请参考以下文章