【C语言】字符串操作总结

发布于:2024-05-05 ⋅ 阅读:(28) ⋅ 点赞:(0)

目录

前言

1.字符串逆序输出

(1)不改变输入的字符串

(2)改变输入的字符串

2.求字符串长度的函数strlen

3.字符串拷贝函数strcpy

4.字符串连接函数strcat

5.字符串比较函数strcmp

6.strncpy(p, p1, n) 复制指定长度字符串  

7.strncat(p, p1, n) 附加指定长度字符串

8.strcasecmp忽略大小写比较字符串

9.strncmp(p, p1, n) 比较指定长度字符串

10.strchr(p, c) 在字符串中查找指定字符

11.strstr(p, p1) 查找字符串 

12.isalpha() 检查是否为字母字符

13.isupper() 检查是否为大写字母字符

14.islower() 检查是否为小写字母字符

15.isdigit() 检查是否为数字


前言

总结了常用字符串函数操作和C语言字符串函数的实现


1.字符串逆序输出

(1)不改变输入的字符串

#include <stdio.h>
#include <string.h>

#define N 20

int main(int argc, char *argv[])
{
        char arr[N]; // 使用N初始化数组大小
        int i, n;

        printf("Please input a string:");
        fgets(arr, sizeof(arr), stdin); // 更安全的方式获取输入,使用fgets()函数

        n = strlen(arr); 
        for (i = n-1; i >= 0; i--)
                putchar(arr[i]);
        putchar('\n');

        return 0;
}

 

(2)改变输入的字符串

#include <stdio.h>
#include <string.h>

#define N 20

int main(int argc, char *argv[])
{
        char arr[N] = {0};
        int i, j, n, ch;

        printf("Please input a string:");
        fgets(arr, sizeof(arr), stdin); // 使用fgets安全地获取输入,指定最大读取字符数为数组大小

        n = strlen(arr);
        i = 0;
        j = n-1;
        while (i < j) 
        {
                ch = arr[i];
                arr[i] = arr[j];
                arr[j] = ch;
                i++;
                j--;
        }

        fputs(arr, stdout); // 使用fputs输出字符串,不会自动添加换行符

        return 0;
}

2.求字符串长度的函数strlen

size_t strlen(const char *str);
参数 str 是要计算长度的字符串,返回值是该字符串的长度。

格式:strlen(字符数组)

功能:计算字符串长度

返值:返回字符串实际长度,不包括‘\0’在内

\xhh表示十六进制数代表的符号

\ddd表示8进制的

例:对于以下字符串,strlen(s)的值为:

char  s[10]={‘A’,‘\0’,‘B’,‘C’,‘\0’,‘D’};

char  s[ ]=“\t\v\\\0will\n”;

char  s[ ]=“\x69\141\n”; 答案:1   3   3

函数实现思路:

#include <stddef.h> // 为了使用 size_t 类型

size_t strlen(const char *str) 
{
    size_t length = 0; // 初始化字符串长度为 0

    // 循环直到遇到字符串的结尾
    while (*str != '\0') 
    {
        length++; // 每遍历一个字符,长度加一
        str++;    // 指针向后移动到下一个字符
    }

    return length; // 返回字符串长度
}

 

3.字符串拷贝函数strcpy

char *strcpy(char *dest, const char *src);

 参数 dest 是目标字符串,src 是源字符串。该函数将 src 中的内容复制到 dest 中,并返回 dest

格式:strcpy(字符数组1,字符串2)

功能:将字符串2,拷贝到字符数组1中去

返值:返回字符数组1的首地址

说明: 字符数组1必须足够大 ,拷贝时‘\0’一同拷贝 

函数实现思路

char *strcpy(char *dest, const char *src) 
{
    char *p = dest; // 保存目标字符串的起始地址

    // 将源字符串的每个字符复制到目标字符串中,直到遇到源字符串的结尾
    while (*src != '\0')
    {
        *dest = *src; // 将源字符串的字符复制到目标字符串中
        dest++;       // 指针移动到下一个目标字符串的位置
        src++;        // 源字符串的指针也移动到下一个字符
    }

    *dest = '\0'; // 在目标字符串的末尾添加 null 字符 '\0'

    return p; // 返回目标字符串的起始地址
}

 

4.字符串连接函数strcat

char *strcat(char *dest, const char *src);

 参数 dest 是目标字符串,src 是要连接的字符串。该函数将 src 中的内容连接到 dest 的末尾,并返回 dest

格式:strcat(字符数组1,字符数组2)

功能:把字符数组2连到字符数组1后面

返值:返回字符数组1的首地址

说明: 字符数组1必须足够大 以容纳原始字符串的内容和新的字符串内容

连接前,两串均以‘\0’结束;

连接后,串1的‘\0’取消,新串最后加‘\0’

函数实现思路:

char *strcat(char *dest, const char *src) 
{
    char *p = dest; // 保存目标字符串的起始地址

    // 移动指针到目标字符串的结尾
    while (*dest != '\0') 
    {
        dest++;
    }

    // 将源字符串的内容复制到目标字符串的末尾
    while (*src != '\0') 
    {
        *dest = *src; // 将源字符串的字符复制到目标字符串的末尾
        dest++;       // 指针移动到下一个目标字符串的位置
        src++;        // 源字符串的指针也移动到下一个字符
    }

    *dest = '\0'; // 在目标字符串的末尾添加 null 字符 '\0'

    return p; // 返回目标字符串的起始地址
}

 

5.字符串比较函数strcmp

int strcmp(const char *str1, const char *str2);

参数 str1str2 是要比较的两个字符串。如果两个字符串相等,返回值为 0;如果 str1 按字典顺序小于 str2,则返回值小于 0;如果 str1 按字典顺序大于 str2,则返回值大于 0。

格       式:strcmp(字符串1,字符串2)

功       能:比较两个字符串   比较规则:对两串从左向右逐个字符比较                      

                (ASCII码),直到遇到不同字符或‘\0’为止                                          

返       值:返回int型整数

        a. 若字符串1< 字符串2, 返回负整数

        b. 若字符串1> 字符串2, 返回正整数

        c. 若字符串1== 字符串2, 返回零 

函数实现: 

int strcmp(const char *str1, const char *str2) 
{
    while (*str1 != '\0' && *str2 != '\0' && *str1 == *str2) 
    {
        str1++;
        str2++;
    }
    return (*str1 - *str2); // 返回字符串比较结果
}

 

6.strncpy(p, p1, n) 复制指定长度字符串  

strncpy 函数用于将源字符串的指定长度复制到目标字符串中。如果源字符串的长度小于指定长度,则在复制完源字符串后,目标字符串的剩余空间将用空字符填充。 

char *strncpy(char *dest, const char *src, size_t n);

参数 dest 是目标字符串,src 是源字符串,n 是要复制的字符数。

 函数实现:

#include <stddef.h> // 为了使用 size_t 类型

// 将源字符串的内容复制到目标字符串,最多复制 n 个字符
char *strncpy(char *dest, const char *src, size_t n) 
{
    char *p = dest; // 保存目标字符串的起始地址

    // 拷贝源字符串的内容到目标字符串,直到达到指定的字符数或者遇到源字符串的结尾
    while (n > 0 && *src != '\0') 
    {
        *dest++ = *src++; // 将源字符串的字符复制到目标字符串中
        n--;
    }

    //如果源字符串的长度小于指定长度,则在复制完源字符串后,目标字符串的剩余空间将用空字符填充。 
    while (n > 0) 
    {
        *dest++ = '\0'; 
    }

    return p; // 返回目标字符串的起始地址
}

7.strncat(p, p1, n) 附加指定长度字符串

strncat 函数用于将源字符串的指定长度附加到目标字符串的末尾。

char *strncat(char *dest, const char *src, size_t n);

参数 dest 是目标字符串,src 是源字符串,n 是要附加的字符数。

函数实现:

char *strncat(char *dest, const char *src, size_t n) 
{
    char *p = dest; // 保存目标字符串的起始地址

    // 移动指针到目标字符串的结尾
    while (*dest != '\0') 
    {
        dest++;
    }

    // 将源字符串的内容复制到目标字符串的末尾,最多复制 n 个字符
    while (n > 0 && *src != '\0') 
    {
        *dest++ = *src++; // 将源字符串的字符复制到目标字符串的末尾
        n--;
    }

    *dest = '\0'; // 在目标字符串的末尾添加 null 字符 '\0'

    return p; // 返回目标字符串的起始地址
}

 

8.strcasecmp忽略大小写比较字符串

strcasecmp 函数用于比较两个字符串,忽略大小写。其原型为:

int strcasecmp(const char *str1, const char *str2);

参数 str1str2 是要比较的两个字符串。如果两个字符串相等(不区分大小写),返回值为 0;否则返回非 0 值。

函数实现:

#include <ctype.h> // 为了使用 tolower 函数

int strcasecmp(const char *str1, const char *str2) 
{
    while (*str1 != '\0' && *str2 != '\0' && tolower(*str1) == tolower(*str2)) 
    {
        str1++;
        str2++;
    }
    return (tolower(*str1) - tolower(*str2)); // 返回字符串比较结果
}

 

9.strncmp(p, p1, n) 比较指定长度字符串

strncmp 函数用于比较两个字符串的前n个字符。其原型为:

int strncmp(const char *str1, const char *str2, size_t n);

参数 str1str2 是要比较的两个字符串,n 是要比较的字符数。如果两个字符串的前n个字符相等,返回值为 0;否则返回非 0 值。

函数实现:

#include <stddef.h> // 为了使用 size_t 类型

int strncmp(const char *str1, const char *str2, size_t n) 
{
    while (n > 0 && *str1 != '\0' && *str2 != '\0' && *str1 == *str2) 
    {
        str1++;
        str2++;
        n--;
    }
    if (n == 0) 
    {
        return 0; // 前 n 个字符相等
    } 
    else 
    {
        return (*str1 - *str2); // 返回字符串比较结果
    }
}

 

10.strchr(p, c) 在字符串中查找指定字符

strchr 函数在字符串中查找指定字符,并返回第一个匹配到的字符的指针。其原型为:

char *strchr(const char *str, int c);

参数 str 是要搜索的字符串,c 是要查找的字符。如果找到了指定字符,则返回该字符在字符串中的地址;否则返回 NULL。

 函数实现:

char *strchr(const char *str, int c) 
{
    while (*str != '\0') 
    {
        if (*str == c) 
        {
            return (char *)str; // 返回指定字符在字符串中的位置
        }
        str++;
    }
    return NULL; // 没有找到指定字符,返回 NULL
}

11.strstr(p, p1) 查找字符串 

strstr 函数在字符串中查找指定子字符串,并返回第一个匹配到的子字符串的指针。其原型为:

char *strstr(const char *haystack, const char *needle);

参数 haystack 是要搜索的字符串,needle 是要查找的子字符串。如果找到了指定的子字符串,则返回该子字符串在字符串中的地址;否则返回 NULL。

函数实现:

char *strstr(const char *haystack, const char *needle) 
{
    while (*haystack != '\0') 
    {
        const char *h = haystack;
        const char *n = needle;

        // 在 haystack 中查找与 needle 第一个字符匹配的位置
        while (*h != '\0' && *n != '\0' && *h == *n) 
        {
            h++;
            n++;
        }

        // 如果找到了 needle,则返回其在 haystack 中的位置
        if (*n == '\0') 
        {
            return (char *)haystack;
        }

        // 否则,继续搜索下一个字符
        haystack++;
    }

    // 如果 haystack 中不存在 needle,则返回 NULL
    return NULL;
}

 

12.isalpha() 检查是否为字母字符

isalpha 函数用于检查一个字符是否为字母字符(即 A-Z 或 a-z)。其原型为:

int isalpha(int c);

如果 c 是一个字母字符,则返回非零值(即真);否则返回 0。

函数实现:

int isalpha(int c) 
{
    return ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'));
}

 

13.isupper() 检查是否为大写字母字符

isupper 函数用于检查一个字符是否为大写字母字符(即 A-Z)。其原型为:

int isupper(int c);

如果 c 是一个大写字母字符,则返回非零值(即真);否则返回 0。

函数实现:

int isupper(int c) 
{
    return (c >= 'A' && c <= 'Z');
}

 

14.islower() 检查是否为小写字母字符

islower 函数用于检查一个字符是否为小写字母字符(即 a-z)。其原型为:

int islower(int c);

如果 c 是一个小写字母字符,则返回非零值(即真);否则返回 0。

函数实现:

int islower(int c) 
{
    return (c >= 'a' && c <= 'z');
}

 

15.isdigit() 检查是否为数字

isdigit 函数用于检查一个字符是否为数字字符(即 0-9)。其原型为:

int isdigit(int c);

如果 c 是一个数字字符,则返回非零值(即真);否则返回 0。

函数实现:

int isdigit(int c) 
{
    return (c >= '0' && c <= '9');
}


网站公告

今日签到

点亮在社区的每一天
去签到