简介: 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;
}