1.字符串长度
size_t my_strlen(const char *string);
2.字符串的拷贝
char *my_strcpy(char *dest_str, const char *src_str);
char *my_strncpy(char *dest_str, const char *src_str,
size_t num);
3.字符串的比较
int my_strcmp(const char *string1, const char *string2);
int my_strncmp(const char *string1, const char *string2,
size_t num);
4.字符串的连接
char *strcat(char *dest_str, const *src_str);
char *strncat(char *dest_str, const *src_str,
size_t num);
5.字符串的查找
char *my_strchr(const char *string, int chr);
int find_index(const char *string, int chr);
1.字符串的长度
功能:计算输入字符串长度
size_t my_strlen(const char *string)
{
const char *str = string;
size_t length = 0;
if(string == NULL){
return 0;
}
while(*str++ != '\0'){
length++;
}
return length;
}
2.字符串的拷贝
功能:将已给定的字符串内容拷贝到另一个上
char *my_strcpy(char *dest_str, const char *src_str)
{
char *dest = dest_str;
const char *src = src_str;
//如果参数不合法,或者dest和src指向为同一个字符串,无需拷贝
if(dest_str == NULL || src_str == NULL
|| dest_str == src_str){
return dest_str;
}
//拷贝动作
while((*dest++ = *src++) != '\0'){
}
return dest_str;
}
char *my_strncpy(char *dest_str, const char *src_str,
size_t num)
{
char *dest = dest_str;
const char *src = src_str;
//如果参数不合法,或者dest和src指向为同一个字符串,无需拷贝
if(dest_str == NULL || src_str == NULL
|| dest_str == src_str){
return dest_str;
}
//拷贝动作
while( num-- && (*dest++ = *src++) != '\0'){
}
return dest_str;
}
3.字符串的比较
功能:传入两个字符串,比较str1和str2的大小。如果str1大于str2,则返回值为正;如果相等返回值为0;如果str1小于str2,返回值为负;
int my_strcmp(const char *str1, const char *str2)
{
do{
if(*str1 != *str2){
break;
}
str1++;
str2++;
}while(*str1 != '\0' || *str2 != '\0');
return (*str1-*str2);
}
int my_strncmp(const char *str1, const char *str2,size_t num)
{
int i = 0;
do{
if(*str1 != *str2){
break;
}
str1++;
str2++;
i++;
}while(*str1 != '\0' && *str2 != '\0' && i < num);
return (*str1-*str2);
}
4.字符串的连接
功能:将一个字符串拼接到另一个字符串后面
char *my_strcat(char *dest_str, const char *src_str)
{
// "hello,world"
char *dest = dest_str;
const char *src = src_str;
if(dest_str == NULL || src_str == NULL){
return dest_str;
}
//首先要找到dest末尾
// "hello"
dest += my_strlen(dest_str);
my_strcpy(dest, src);
return dest_str;
}
char *my_strncat(char *dest_str, const char *src_str,
size_t num)
{
// "hello,world"
char *dest = dest_str;
const char *src = src_str;
if(dest_str == NULL || src_str == NULL){
return dest_str;
}
//首先要找到dest末尾
// "hello"
dest += my_strlen(dest_str);
my_strncpy(dest, src, num);
return dest_str;
}
5.字符串的查找
char *my_strchr(const char *string, int chr)
{
const char *str = string;
if(string != NULL){
//从头到尾查找和chr相等的第一个值,如果找到返回其地址
while(*str != '\0'){
if(*str == (char)chr){
return (char *)str;
}
str++;
}
}
return NULL;
}
int find_index(const char *string, int chr)
{
// "hello,world"
char *find_char = NULL;
if((find_char = my_strchr(string, chr)) != NULL){
return find_char - string;
}else{
return -1;
}
}
//找字符在字符串中最后一次出现的位置
char *strrchr(const char *string, int chr)
{
const char *str = string;
char *p_char = NULL;
if(string != NULL){
while(*str != '\0'){
if(*str == (char)chr){
p_char = (char *)str;
}
str++;
}
}
return p_char;
}