最近遇到很多str系列的函数,于是将他们整理了一下:
1.strlen
函数原型:unsigned int strlen(const char *str)
函数功能:计算字符串中包含字符的个数
特点:遇‘\0’停止计数
<span style="font-family:SimSun;font-size:18px;"><span style="font-size:18px;">unsigned int my_strlen(const char* a)
{
int count = 0;
assert(a);
while (*a++)
{
count++; //字符串计数
}
return count;
}
int main()
{
char a[] = "wuqhiqw";
int len = my_strlen(a);
printf("%d", len);
return 0;
}</span></span>
函数原型:char* strcmp( char* dest,char* src)
函数功能:将字符串1的内容拷贝到字符串2中
特点:遇到'\0'停止
<span style="font-family:SimSun;font-size:18px;"><span style="font-size:18px;">void my_strcpy(char* dest, const char* src)
{
assert(src);
while (*dest++ = *src++) //循环拷贝
{
;
}
}
int main()
{
char src[] = "nuqhwd";
char dest[20] = { 0 };
my_strcpy(dest, src);
printf("%s\n", dest);
return 0;
}</span></span>
函数原型:char* strcat(char* dest,char* src)
函数功能:连接两个字符串,将字符串src连接到字符串dest的后面
<span style="font-family:SimSun;font-size:18px;"><span style="font-size:18px;">void my_strcat(char *dest, char *src)
{
while (*dest)
{
*dest++; //让dest走到'\0'位置
}
while (*src)
{
*dest++ = *src++; //拷贝
}
*dest = '\0';
}
int main()
{
char dest[20] = "asjdiq";
char src[] = "ni9io";
my_strcat(dest,src);
printf("%s\n", dest);
return 0;
}</span></span>
4、strstr
函数原型:char*(const char* dest,const char* src)
函数功能:在字符串中dest中查找字符串src,若找到返回src出现的位置指针,若没有找到则返回空指针
<span style="font-family:SimSun;font-size:18px;">char* my_strstr(const char *dest, const char*src)
{
assert(dest);
assert(src);
for (int i = 0; dest[i] != '\0'; i++)
{
int tmp = i; //保存指针位置
int j = 0;
while (src[j++] == dest[i++])
{
if (src[j] == '\0'); //对比字串完毕
return dest+tmp;
}
i = tmp; //还原指针
}
return NULL;
}
int main()
{
char a[]= "huacqwopa";
char b[] = "acq";
printf("%s\n", my_strstr(a, b));
return 0;
}</span>
函数原型:int strcmp(const char* dest,char*src)
函数功能:逐个比较两个字符串,若两个字符串完全相同返回0,否则返回第一个不相同的字符的ascii相减值
<span style="font-family:SimSun;font-size:18px;">int my_strcmp(const char *dest, const char* src)
{
assert(dest);
assert(src);
while (*dest == *src)
{
if (*dest == '\0')
return 0; //字符串相等
dest++;
src++;
}
return *dest - *src; //字符串不相等
}
int main()
{
char a[] = "agygwduasd";
char b[] = "abcaudha";
int ret = my_strcmp(a, b);
if (ret == 0) //根据返回值判断
{
printf("a = b \n");
}
else if (ret > 0)
{
printf("a > b \n");
}
else
{
printf("a < b \n");
}
return 0;
}</span>
6、strchr
函数原型:char* strchr(const char*str ,char c)
函数功能:在字符串str查找第一次出现字符'c'的位置,若找到返回该字符所在位置的指针,若找不到返回空指针
<span style="font-family:SimSun;font-size:18px;">char* my_strchr(char* str, char c)
{
while ((*str != '\0') )
{
if (*str=='c') //找到字符
return str;
str++;
}
return NULL;
}
int main()
{
char* str = "shduquhcc";
printf("%s", my_strchr(str,'c'));
system("pause");
return;
}</span>
7、strrchr
函数原型;char* my_strrchr(char *str, char c)
函数功能:在字符串str中查找最后一次出现字符'c'的位置,若找到返回该字符所在位置的指针,若找不到返回空指针
<span style="font-family:SimSun;font-size:18px;">char* my_strrchr(const char *str, char c)
{
int count = 0;
while (*str != '\0')
{
*str++; //先让指针指向最后一个字符
count++;
}
for (int i = 0; i < count; i++)
{
if (*(--str) == 'c') //逆向查找
return str;
}
return NULL;
}
int main()
{
char* str = "hsbdcicknoccwedqw";
printf("%s", my_strrchr(str,'c'));
system("pause");
return 0;
}</span>
8、strdup
函数原型:char* my_strdup(const char* str)
函数功能:将字符串str中的内容拷贝到新建字符串中,并返回指向新建字符串的指针,若操作失败则返回空指针
<span style="font-family:SimSun;font-size:18px;">int main()
{
char* str = "hsbdcicknoccwedqw";
printf("%s", my_strrchr(str,'c'));
system("pause");
return 0;
}
char* my_strdup(const char* str)
{
char* cs = (char*)malloc(100); //动态开辟内存
char* ps = cs; //保存指针位置
while (*str != '\0')
{
*cs++ = *str++;
}
*cs = '\0';
return ps;
}
int main()
{
char *str = "ajsdiuqh";
printf("%s\n", my_strdup(str));
free(my_strdup(str)); //释放空间
return 0;
}
</span>
函数原型:void my_strrev(char* str)
函数功能:逆转字符串
<span style="font-family:SimSun;font-size:18px;">void my_strrev(char* str)
{
int len = strlen(str);
char* left = str; //设定左下标
char* right = str + len-1; //设定右下标
while (left < right)
{
char tmp = *left;
*left = *right;
*right = tmp; //左右交换内容
left++;
right--;
}
}
int main()
{
char str[] = "abcdef";
my_strrev(str);
printf("%s", str);
system("pause");
return 0;
}
</span>