C语言 - 字符串分割strtok()和sscanf ()
C语言中分割字符串有多种实现方法,下面我将介绍其中几种不同的方法:
1、使用strtok函数
char *strtok(char *str, const char *delim);
strtok函数可以根据指定的分隔符拆分字符串。其原型如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char str[80] = "1001#8888#你好#1993#世界";
const char s[2] = "#";// 分割字符串,以逗号和空格作为分隔符
char* token;
char* strArray[10];//指针数组
/* 获取第一个子字符串 */
token = strtok(str, s);
/* 用数组保存第一个子字符串 */
strArray[0] = token;
int i = 1;
while (token != NULL)
{
/* 打印子字符串 */
printf(" %s\n", token);
/* 获取下一个子字符串 */
token = strtok(NULL, s);
/* 用数组保存第一个之后的子字符串 */
strArray[i] = token;
i++;
}
//遍历数组
for (int i = 0; i < 5; i++)
{
printf("Array[%d] = %s\n", i, strArray[i]);
}
return(0);
}
这里使用 strtok 函数可以将字符串分割成多个子字符串,其中第一个参数为需要分割的字符串,第二个参数为分隔符。函数会返回分割后的子字符串的指针,通过循环调用 strtok 函数来获取所有子字符串。
运行结果:
2、使用 sscanf 函数
#include <stdio.h>
#include <string.h>
int main()
{
char str[] = "Hello World,Welcome";
char token[20]; // 存储分割后的子字符串
char delimiter[3] = ", "; // 分隔符
int i = 0;
while (sscanf(str+i, "%[^, ]%n", token, &i) == 1) {
printf("%s\n", token);
i += strspn(str+i, delimiter);
}
return 0;
}
这里使用 sscanf 函数结合正则表达式可以从字符串中逐个读取分割后的子字符串。循环遍历整个字符串,每一次使用 %[^, ]%n 格式来匹配子字符串,并通过 %n 记录读取的字符数,并更新下一次读取的位置。
3、手动实现分割函数
#include <stdio.h>
#include <string.h>
void splitString(char *str, const char *delimiter)
{
char *token = strtok(str, delimiter);
while (token != NULL)
{
printf("%s\n", token);
token = strtok(NULL, delimiter);
}
}
int main()
{
char str[] = "Hello World,Welcome";
splitString(str, ", ");
return 0;
}
这种方法是手动实现分割函数,通过编写一个函数来实现字符串的分割。函数内部使用 strtok 函数来进行子字符串的分割,循环遍历获取子字符串。