C语言 字符函数和字符串函数 (上)

目录

​编辑

1.前言

2.strlen()

2.1 strlen的声明

2.2 strlen的使用

2.3 模拟实现strlen

3. strcpy()

3.1使用方法

3.2 模拟实现strcpy

4. strcat()

4.1 strcat使用方法

4.2 模拟实现strcat

 5 strcmp()

5.1strcmp的使用

5.2 模拟实现strcmp


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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值