首页 > 其他分享 >2-2 字符串的基本操作函数及注意事项(超详细)

2-2 字符串的基本操作函数及注意事项(超详细)

时间:2024-08-05 20:24:43浏览次数:16  
标签:const int char dest 注意事项 字符串 基本操作 include

目录

字符串操作函数分类

1. 字符串长度和复制

2. 字符串连接

3. 字符串比较

4. 字符串查找

5. 字符串转换

6. 字符串复制和移动

7. 字符串填充和比较

字符串操作函数使用

1. strlen 函数

2. strcpy 函数

3. strcat 函数

4. strcmp 函数

5. strncpy 函数

6. strncat 函数

7. strncmp 函数

8. strchr 函数

9. strrchr 函数

10. strstr 函数


在编程中,字符串操作是非常常见的任务,特别是在处理文本数据时。以下是一些常用的字符串操作函数,主要是 C 标准库中的函数:

字符串操作函数分类

1. 字符串长度和复制

  1. strlen: 计算字符串的长度。

    size_t strlen(const char *str);

  2. strcpy: 复制字符串。

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

  3. strncpy: 复制指定长度的字符串。

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

2. 字符串连接

  1. strcat: 连接字符串。

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

  2. strncat: 连接指定长度的字符串。

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

3. 字符串比较

  1. strcmp: 比较字符串。

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

  2. strncmp: 比较指定长度的字符串。

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

4. 字符串查找

  1. strchr: 查找字符在字符串中首次出现的位置。

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

  2. strrchr: 查找字符在字符串中最后一次出现的位置。

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

  3. strstr: 查找子字符串在字符串中首次出现的位置。

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

5. 字符串转换

  1. atoi: 将字符串转换为整数。

    int atoi(const char *str);

  2. atol: 将字符串转换为长整数。

    long int atol(const char *str);

  3. atof: 将字符串转换为浮点数。

    double atof(const char *str);

  4. strtol: 将字符串转换为长整数,具有错误处理。

    long int strtol(const char *str, char **endptr, int base);

  5. strtoul: 将字符串转换为无符号长整数,具有错误处理。

    unsigned long int strtoul(const char *str, char **endptr, int base);

  6. strtod: 将字符串转换为双精度浮点数,具有错误处理。

    double strtod(const char *str, char **endptr);

6. 字符串复制和移动

  1. memcpy: 复制内存块。

    void *memcpy(void *dest, const void *src, size_t n);
    
  2. memmove: 移动内存块。

    void *memmove(void *dest, const void *src, size_t n);

7. 字符串填充和比较

  1. memset: 填充内存块。

    void *memset(void *s, int c, size_t n);

  2. memcmp: 比较内存块。

    int memcmp(const void *s1, const void *s2, size_t n);

字符串操作函数使用

1. strlen 函数

功能: 计算字符串的长度(不包括末尾的空字符'\0')。

原型: size_t strlen(const char *str);

使用示例:

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

int main() {
    char str[] = "Hello, world!";
    size_t len = strlen(str);
    printf("Length of the string is: %zu\n", len);
    return 0;
}

注意事项:

  • 确保字符串是以空字符 '\0' 结尾的。如果字符串没有正确地终止,strlen 可能会继续读取内存中的数据,直到遇到一个空字符,导致未定义行为。
  • 使用 strlen 的结果时注意防止越界访问。

2. strcpy 函数

功能: 将源字符串复制到目标字符串中(包括末尾的空字符'\0')。

原型: char *strcpy(char *dest, const char *src);

使用示例:

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

int main() {
    char src[] = "Hello, world!";
    char dest[50]; // 确保目标数组足够大以容纳源字符串
    strcpy(dest, src);
    printf("Copied string is: %s\n", dest);
    return 0;
}

注意事项:

  • 目标字符串 dest 必须有足够的空间来容纳源字符串 src,包括终止的空字符 '\0'。如果 dest 空间不足,会导致缓冲区溢出,可能引发安全漏洞。
  • 推荐使用更安全的 strncpy 函数,指定最大复制字符数。

3. strcat 函数

功能: 将源字符串追加到目标字符串的末尾(目标字符串必须有足够的空间容纳新字符串)。

原型: char *strcat(char *dest, const char *src);

使用示例:

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

int main() {
    char dest[50] = "Hello, ";
    char src[] = "world!";
    strcat(dest, src);
    printf("Concatenated string is: %s\n", dest);
    return 0;
}

注意事项:

  • 目标字符串 dest 必须有足够的空间来容纳原有的内容和源字符串 src 以及终止的空字符 '\0'。如果 dest 空间不足,会导致缓冲区溢出。
  • 推荐使用更安全的 strncat 函数,指定最大追加字符数。

4. strcmp 函数

功能: 比较两个字符串的大小。

原型: int strcmp(const char *str1, const char *str2);

返回值:

  • 如果str1等于str2,返回0
  • 如果str1小于str2,返回负值。
  • 如果str1大于str2,返回正值。

使用示例:

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

int main() {
    char str1[] = "Hello";
    char str2[] = "World";
    int result = strcmp(str1, str2);
    if (result == 0) {
        printf("The strings are equal.\n");
    } else if (result < 0) {
        printf("The first string is less than the second string.\n");
    } else {
        printf("The first string is greater than the second string.\n");
    }
    return 0;
}

注意事项:

  • strcmp 返回一个整数,根据返回值判断字符串的大小关系。
  • strcmp 比较时区分大小写。如果需要不区分大小写的比较,可以使用 strcasecmpstricmp 函数(具体函数名称根据系统有所不同)。

5. strncpy 函数

功能: 将指定长度的字符从源字符串复制到目标字符串。

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

使用示例:

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

int main() {
    char src[] = "Hello, world!";
    char dest[50];
    strncpy(dest, src, 5); // 只复制前5个字符
    dest[5] = '\0'; // 手动添加终止符
    printf("Copied string is: %s\n", dest);
    return 0;
}

注意事项:

  • strncpy 不一定会在目标字符串末尾添加终止的空字符 '\0',如果源字符串长度大于或等于指定长度 n,需要手动添加 '\0'
  • 使用时要确保目标字符串有足够的空间存放指定长度的字符及可能的终止符。

6. strncat 函数

功能: 将指定长度的字符从源字符串追加到目标字符串的末尾。

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

使用示例:

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

int main() {
    char dest[50] = "Hello, ";
    char src[] = "world!";
    strncat(dest, src, 3); // 只追加前3个字符
    printf("Concatenated string is: %s\n", dest);
    return 0;
}

注意事项:

  • strncat 追加的字符数不包括终止的空字符 '\0',但会自动在末尾添加一个空字符。因此,目标字符串需要有足够的空间。
  • 使用时要注意源字符串和追加的字符数,以及目标字符串的剩余空间。

7. strncmp 函数

功能: 比较两个字符串的前n个字符。

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

使用示例:

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

int main() {
    char str1[] = "Hello";
    char str2[] = "Helium";
    int result = strncmp(str1, str2, 3); // 比较前3个字符
    if (result == 0) {
        printf("The first 3 characters of the strings are equal.\n");
    } else if (result < 0) {
        printf("The first 3 characters of the first string are less than the second string.\n");
    } else {
        printf("The first 3 characters of the first string are greater than the second string.\n");
    }
    return 0;
}

注意事项:

  • strncmp 只比较指定长度的字符,如果两个字符串在指定长度内相同,返回 0,否则返回正值或负值。
  • 使用时要确保比较的长度不会超出字符串实际长度。

8. strchr 函数

功能: 查找字符串中首次出现的字符。

原型: char *strchr(const char *str, int c);

使用示例:

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

int main() {
    char str[] = "Hello, world!";
    char *ptr = strchr(str, 'o');
    if (ptr) {
        printf("First occurrence of 'o' is at position: %ld\n", ptr - str);
    } else {
        printf("'o' not found in the string.\n");
    }
    return 0;
}

注意事项:

  • strchr 查找的字符在字符串中首次出现的位置,如果未找到则返回 NULL
  • 使用返回的指针时要检查是否为 NULL,以避免访问非法内存。

9. strrchr 函数

功能: 查找字符串中最后一次出现的字符。

原型: char *strrchr(const char *str, int c);

使用示例:

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

int main() {
    char str[] = "Hello, world!";
    char *ptr = strrchr(str, 'o');
    if (ptr) {
        printf("Last occurrence of 'o' is at position: %ld\n", ptr - str);
    } else {
        printf("'o' not found in the string.\n");
    }
    return 0;
}

注意事项:

  • strrchr 查找的字符在字符串中最后一次出现的位置,如果未找到则返回 NULL
  • 使用返回的指针时要检查是否为 NULL,以避免访问非法内存。

10. strstr 函数

功能: 查找子字符串在字符串中首次出现的位置。

原型: char *strstr(const char *haystack, const char *needle);

使用示例:

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

int main() {
    char haystack[] = "Hello, world!";
    char needle[] = "world";
    char *ptr = strstr(haystack, needle);
    if (ptr) {
        printf("Substring found at position: %ld\n", ptr - haystack);
    } else {
        printf("Substring not found.\n");
    }
    return 0;
}

注意事项:

  • strstr 查找子字符串在字符串中首次出现的位置,如果未找到则返回 NULL
  • 使用返回的指针时要检查是否为 NULL,以避免访问非法内存。

标签:const,int,char,dest,注意事项,字符串,基本操作,include
From: https://blog.csdn.net/weixin_61944480/article/details/140935856

相关文章

  • 在oracle中将一行字符串拆分成多行
    例如,有如下一张表,表名为bk_test。插入了以下数据:CREATETABLEBK_TESK(idvarchar2(10),svarchar2(20));insertintoBK_TESKvalues('A','1,2,3');insertintoBK_TESKvalues('B','4,5,6');insertintoBK_TESKvalues('C','......
  • 多态的概念,前提,注意事项以及访问成员的特点 day09
    多态:某一个事物在不同状态下的多种状态举例:1、学生是人,老师是人,医生是人。2、汽态的水是水,固态的水是水,液态的水是水在java中要实现多态的话,需要有3个前提:1、必须要有继承关系2、要有方法的重写(思考可否不重写?)......
  • 【Python】Python中的输入与输出——内附Leetcode【151.反转字符串中的单词】的C语言
    输入与输出导读一、Python中的输出1.1基本用法1.2格式化输出1.3通过`:`格式化值的输出1.4其它格式化输出二、Python中的输入2.1基本用法2.2`split()`方法2.3split()习题演练结语导读大家好,很高兴又和大家见面啦!!!在上一篇内容中我们介绍了Python中的数据类......
  • 如何将 *args 参数作为字符串传递给 Python 函数
    我正在使用pytubefix制作一个Youtube下载器。API允许我编写如下代码:YouTube(url).streams.filter(progressive=True)但是假设我有一个字符串存储在像args="progressive=True"这样的变量中,我如何使用args字符串来调用函数,就像......
  • 字符串常量池
    Java中的字符串常量池目录Java中的字符串常量池工作原理举例说明字面量创建形式使用new创建internjava中字符串对象创建有两种形式,一种为字面量形式,如Stringstr="droid";,另一种就是使用new这种标准的构造对象的方法,如Stringstr=newString("droid");,这两种方式我们在代码......
  • 代码随想录算法训练营day04之字符串
    题目及链接:344.反转字符串541.反转字符串||卡码网54.替换数字151.翻转字符串里的单词卡码网55.右旋字符串28.找出字符串中第一个匹配项的下标459.重复的子字符串344.反转字符串太简单就不写了541.反转字符串||题意:给定一个字符串s和一个整数k,从字符串开头算起,每......
  • 模拟实现 strcat(字符串追加) --浅谈C语言
    strcat描述char*strcat(char*dest,constchar*src)把src所指向的字符串追加到dest所指向的字符串的结尾。声明下面是strcat()函数的声明。char*strcat(char*dest,constchar*src)参数dest--指向目标数组,该数组包含了一个C字符串,且足够容纳追加后的字符......
  • 字符串中的第一个唯一字符
    给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。s 只包含小写字母示例1:输入:s="leetcode"输出:0示例2:输入:s="loveleetcode"输出:2示例3:输入:s="aabb"输出:-1由于只包含小写字母,创建一个大小为26......
  • 模拟实现 strcmp(字符串比较) --浅谈C语言
    C库函数-strcmp()描述C库函数intstrcmp(constchar*str1,constchar*str2)把str1所指向的字符串和str2所指向的字符串进行比较。声明下面是strcmp()函数的声明。intstrcmp(constchar*str1,constchar*str2)参数str1--要进行比较的第一个字符串。......
  • C 语言(二)数组与字符串
    C语言(二)数组与字符串1.数组所谓数组,就是一个集合,里面存放了相同类型的数据元素特点1:数组中的每个数据元素都是相同的数据类型特点2:数组是由连续的内存位置组成的1.1一维数组定义://伪代码数据类型数组名【数组长度】;数据类型数组名【数组长度】={值1,值2};......