前言:
c语言中对字符和字符串的处理很是频繁,但是c语言本身是没有字符串类型的,字符串通常放在常量字符串中或者常量字符数组中。
字符串常量:适用于那些对它不做修改的字符串函数。
目录
1.strlen-----计算字符串的长度
1.1.strlen 函数的用例
1.2:strlen 的实现
size_t My_strlen(const char* str)
{
size_t count = 0;
while (*str != '\0')
{
str++;
count++;
}
return count;
}
int main()
{
char arr[] = "hello word";
int len = My_strlen(arr);
printf("%d", len);
return 0;
}
2.strcpy-----字符串复制
2.1:strcpy的用例
注意:
1.目标空间必须做够大,以确保能存放源字符串。
2.目标空间必须可变。
2.2:strcpy的实现:
char* My_strcpy(char* dest, const char* ret)
{
char* tmp = dest;
while (*ret != '\0')
{
*dest = *ret;
dest++;
ret++;
}
*dest = '\0';
return tmp;
}
int main()
{
char arr[10];
char arr1[7] = "hello";
char *tmp=My_strcpy(arr,arr1);
printf(tmp);
return 0;
}
有一个函数和它十分相似,但却有点不同,你知道是什么吗?
3.strncpy-----从字符串中复制字符
1.拷贝num个字符从源字符串拷贝到目标空间;
2,如果源字符串的长度小于num,则拷贝完源字符之后,在目标的后面追加零,知道num个字符。
3.1strncpy的用例
3.2:strncpy实现
char* My_strncpy(char* dest, const char* ret, size_t num)
{
char* tmp = dest;
while (num--)
{
if (*ret == '\0')
{
*dest = '\0';
dest++;
}
else
{
*dest = *ret;
dest++;
ret++;
}
}
return tmp;
}
int main()
{
char arr1[10];
char arr[] = "hello word";
char* tmp = My_strncpy(arr1, arr + 6, 8);
printf(tmp);
return 0;
}
4.strcat-----字符追加
注意:
4源字符串必须以"\0"结束
4.2:strcat的用例
4.3:strcat 的实现
char* My_strcat(char* dest, const char* ret)
{
char* tmp = dest;
while (*dest != '\0')
{
dest++;
}
while (*ret != '\0')
{
*dest = *ret;
dest++;
ret++;
}
return tmp;
}
int main()
{
char arr[15] = "hello";
char arr1[] = "word";
char* tmp = My_strcat(arr, arr1);
printf(tmp);
return 0;
}
但这个函数无法自己给自己追加,但接下来的一个函数,可以实现自我追加。
5.strncat------从字符串中追加字符
size_t num:是你要追加的字符个数,size_t是无符号整形
5.1:strncat的用例
5.2:strncat的实现
char* My_strncat(char* dest, const char* ret,size_t num)
{
char* tmp = dest;
while (*dest != '\0')
{
dest++;
}
while (num--)
{
*dest = *ret;
dest++;
ret++;
}
*dest='\0';
return tmp;
}
int main()
{
char arr[20] = "hello word";
char* tmp = My_strncat(arr, arr, 5);
printf(tmp);
return 0;
}
6:strcmp-------字符比较
6.1:strcmp的用例
6.2:strcmp的实现
int My_strcmp(const char* dest, const char* ret)
{
int flag= 0;
assert(dest);
assert(ret);
while (!(flag = *(unsigned char*)dest - *(unsigned char*)ret) && *ret)
{
ret++;
dest++;
}
if (flag < 0)
{
flag = -1;
}
else if (flag > 0)
{
flag = 1;
}
else
{
flag=0;
}
return flag;
}
int main()
{
char arr[] = "abcd";// a=97 b=98 c=99 d=100(ASCILL值)
char arr1[] = "abdc";//a=97.b=98.d=100 c=99
int flag = My_strcmp(arr, arr1);
if (flag > 0)
{
printf(">\n");
}
else if (flag == 0)
{
printf("==\n");
}
else
{
printf("<\n");
}
return 0;
}
有一个函数跟这个函数十分相似,让我们接下来看一看。
7.strncmp-------比较字符串的字符
7.1;strncmp的实现
int My_strncmp(const char* dest, const char* ret,size_t num) { int flag= 0; assert(dest); assert(ret); while (num&&flag==0) { flag = *(unsigned char*)dest - *(unsigned char*)ret; dest++; ret++; num--; } if (flag < 0) { flag = -1; } else if (flag > 0) { flag = 1; } else { flag = 0; } return flag; } int main() { char arr[] = "abcd";// a=97 b=98 c=99 d=100(ASCILL值) char arr1[] = "abdc";//a=97.b=98.d=100 c=99 int flag = My_strncmp(arr, arr1,3); if (flag > 0) { printf(">\n"); } else if (flag == 0) { printf("==\n"); } else { printf("<\n"); } return 0; }