目录
1.前言
C语言提供了一系列用于处理字符和字符串的函数,这些函数通常定义在<string.h>头文件中。下面是一些常用的字符和字符串函数。
2.strlen()
strlen 是一个 C 语言标准库函数,用于计算字符串的长度。它定义在 <string.h> 头文件中,并接受一个以空字符(\0)结尾的字符串作为参数,返回该字符串的长度(不包括终止的空字符)。
2.1 strlen的声明
size_t strlen ( const char * str );
这里的size_t是一个无符号整数类型,它用于表示对象的大小,通常足够大以存储任何数组的大小。const char *str是一个指向以空字符('\0')结尾的字符串的指针。
2.2 strlen的使用
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello, world!";
int len = strlen(str);
printf(" %d\n", len);
return 0;
}
输出结果:13
2.3 模拟实现strlen
代码实现:
#include <stdio.h>
size_t my_strlen(const char *str)
{
size_t len = 0;
while (*str != '\0')
{
len++;
str++;
}
return len;
}
int main()
{
char str[] = "Hello, world!";
size_t len = my_strlen(str);
printf("%d\n", len);
return 0;
}
在这个模拟实现中,my_strlen 函数接受一个指向字符串的指针 str。然后,它使用一个 while 循环遍历字符串中的每个字符,直到遇到空字符(\0)为止。在每次循环中,它递增 len 变量的值,并将 str 指针移动到下一个字符。最后,当遇到空字符时,循环结束,函数返回累计的字符数(即字符串的长度)。
3. strcpy()
声明:char *strcpy(char *dest, const char *src);
参数说明:
dest:指向目标数组的指针,即要复制到的位置。这个数组必须有足够的空间来存放源字符串及其终止的空字符。
src:指向字符串的指针,即要复制的字符串。终止:
src 字符串必须以空字符' \0' 结尾,否则 strcpy() 将继续复制内存,直到遇到偶然的空字符为止
3.1使用方法
#include <stdio.h>
#include <string.h>
int main() {
char src[] = "Hello, world!";
char dest[50];
strcpy(dest, src);
printf(" %s\n", dest);
return 0;
}
输出: Hello, world!
在这个例子中,src 数组包含了一个字符串 "Hello, world!",dest 数组拥有足够大的空间,strcpy(dest, src) 将 src 中的字符串复制到 dest 中,然后打印出复制的字符串。
3.2 模拟实现strcpy
#include <stdio.h>
char* my_strcpy(char* dest, const char* src)
{
char* ret = dest;
// 逐个字符复制,直到遇到src中的空字符'\0'
while (*src != '\0')
{
*dest = *src;
dest++;
src++;
}
// 添加空字符到dest字符串的末尾
*dest = '\0';
return ret;
}
int main() {
char src[] = "Hello, world!";
char dest[50];
my_strcpy(dest, src);
printf("复制的字符串:%s\n", dest);
return 0;
}
4. strcat()
声明:char *strcat(char *dest, const char *src);
strcat 函数用于将两个 C 字符串连接在一起。它接受两个参数:第一个参数 dest 是目标字符串,即你想在其末尾添加另一个字符串的字符串;第二个参数 src 是追加字符串,即你想添加到目标字符串末尾的字符串。
4.1 strcat使用方法
#include <stdio.h>
#include <string.h>
int main()
{
char dest[100] = "Hello, ";
char src[] = "world!";
strcat(dest, src);
printf("%s\n", dest);
return 0;
}
输出: Hello, world!
4.2 模拟实现strcat
#include<stdio.h>
char* my_strcat(char* dest, const char* src)
{
char* temp = dest;
while (*temp != '\0') // 首先找到dest字符串的末尾,即空字符'\0'的位置
{
temp++;
}
// 将src中的字符逐个复制到dest的末尾
while (*src != '\0')
{
*temp = *src;
temp++;
src++;
}
// 在dest的末尾添加空字符'\0'
*temp = '\0';
// 返回dest的起始地址
return dest;
}
int main()
{
char dest[100] = "Hello, ";
char src[] = "world!";
my_strcat(dest, src);
printf("%s\n", dest); // 输出: Hello, world!
return 0;
}
5 strcmp()
strcmp
是 C 语言中的一个标准库函数,用于比较两个字符串。strcmp 会根据ASCll顺序比较两个字符串,并返回一个整数来表示它们之间的关系。
1. 声明:int strcmp(const char *s1, const char *s2);
s1 是一个指向第一个字符串的指针。
s2 是一个指向第二个字符串的指针.
2.返回值
如果 s1 小于 s2,则返回一个负数。
如果 s1 大于 s2,则返回一个正数。
如果 s1 等于 s2,则返回 0。
5.1strcmp的使用
int main() {
char str1[] = "apple";
char str2[] = "banana";
int result;
// 比较 str1 和 str2
result = strcmp(str1, str2);
if (result < 0)
{
printf("str1 小于 str2\n");
}
else if (result > 0)
{
printf("str1 大于 str2\n");
}
else
{
printf("str1 等于 str2\n");
}
return 0;
}
输出:str1 小于 str2
5.2 模拟实现strcmp
代码实现
#include<stdio.h>
int my_strcmp(const char* s1, const char* s2)
{
while (*s1 && (*s1 == *s2)) // 如果当前字符相等,则移动指针到下一个字符
{
s1++;
s2++;
}
return *(const unsigned char*)s1 - *(const unsigned char*)s2;
}
int main()
{
char str1[] = "apple";
char str2[] = "banana";
int result = my_strcmp(str1, str2);
if (result < 0)
{
printf("str1 小于 str2\n");
}
else if (result > 0)
{
printf("str1 大于 str2\n");
}
else
{
printf("str1 等于 str2\n");
}
return 0;
}