简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!
 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀
  优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀
人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

1.前言
本篇目的:C语言之strsep用法实例
2.strsep函数介绍
-  
strsep 函数是 C 语言标准库中的一个函数,用于在字符串中查找并分割子串。该函数在处理由特定分隔符分隔的字符串时非常有用,常见于处理 CSV 文件、命令行参数等场景。
 -  
strsep 函数接受两个参数:一个是指向要分割字符串的指针的指针,另一个是指向分隔符字符串的指针。在每次调用时,strsep 会从原字符串中查找第一个分隔符,将找到的子串与后续部分分离开来,并返回指向子串的指针。同时,它会更新传入的指针,使其指向原字符串中剩余的部分。
 -  
使用 strsep 函数的一个关键特点是它会修改原字符串。这意味着在调用 strsep 后,原字符串的内容会被改变,以反映分割后的状态。因此,如果你需要保留原字符串的副本,你应该在调用 strsep 之前手动复制它。
 -  
需要注意的是,strsep 函数的行为可能因不同的实现而略有差异,因此在使用时应该参考特定平台或编译器的文档。此外,由于它会直接修改原字符串,因此在某些情况下可能会引入错误或不确定性。因此,在使用 strsep 时需要谨慎,并确保理解其行为和潜在的影响。
 -  
总的来说,strsep 函数是一个强大的工具,用于在 C 语言中处理分割字符串的任务。然而,由于它直接修改原字符串,因此在使用时需要格外小心,并考虑使用其他更安全的字符串处理函数作为替代方案。
 
3.代码实例
<1>.分割逗号分隔的字符串
#include <stdio.h>  
#include <string.h>  
  
int main() {  
    char input[] = "apple,banana,cherry";  
    char *token;  
    char *remaining = input; // 指向原字符串的指针  
    const char delim[] = ","; // 分隔符  
  
    // 循环调用 strsep 直到返回 NULL  
    while ((token = strsep(&remaining, delim)) != NULL) {  
        printf("%s\n", token); // 打印每个分割出的子串  
    }  
  
    return 0;  
}
 
<2>.分割空格分隔的字符串
#include <stdio.h>  
#include <string.h>  
  
int main() {  
    char input[] = "Hello world from C language";  
    char *token;  
    char *remaining = input; // 指向原字符串的指针  
    const char delim[] = " "; // 分隔符为空格  
  
    // 循环调用 strsep 直到返回 NULL  
    while ((token = strsep(&remaining, delim)) != NULL) {  
        printf("%s\n", token); // 打印每个分割出的单词  
    }  
  
    return 0;  
}
 
<3>.分割由多个字符分隔的字符串
#include <stdio.h>  
#include <string.h>  
  
int main() {  
    char input[] = "apple:banana;cherry,date";  
    char *token;  
    char *remaining = input; // 指向原字符串的指针  
    const char delim[] = ":;,"; // 分隔符为冒号、分号和逗号  
  
    // 循环调用 strsep 直到返回 NULL  
    while ((token = strsep(&remaining, delim)) != NULL) {  
        printf("%s\n", token); // 打印每个分割出的子串  
    }  
  
    return 0;  
}
 
<4>.处理连续分隔符的情况
#include <stdio.h>  
#include <string.h>  
  
int main() {  
    char input[] = "apple,,banana,   ,cherry";  
    char *token;  
    char *remaining = input; // 指向原字符串的指针  
    const char delim[] = ","; // 分隔符为逗号  
  
    // 循环调用 strsep 直到返回 NULL  
    while ((token = strsep(&remaining, delim)) != NULL) {  
        // 去除可能的开头和结尾空格  
        size_t len = strlen(token);  
        if (len > 0 && token[len - 1] == ' ') {  
            token[len - 1] = '\0'; // 去除尾随空格  
        }  
        if (token[0] == ' ') {  
            memmove(token, token + 1, strlen(token)); // 去除开头空格  
        }  
        printf("%s\n", token); // 打印每个分割出的子串  
    }  
  
    return 0;  
}
                


















