使用 strtok
函数可以比较方便地实现字符串分割。具体来说,可以将 strtok
函数看作一个状态机,它会记录当前扫描到的字符串位置,并根据指定的分隔符将其分割成多个子字符串,并返回分割后的第一个子字符串。
下面的代码演示了如何使用 strtok
函数计算给定字符串中的子字符串数量:
#include <stdio.h>
#include <string.h>
int countSegments(char * s){
//目的:得到s字符串数组的字符串个数
int count = 0;
char* p = strtok(s, " ");
while (p != NULL) {
count ++;
p = strtok(NULL, " ");
}
return count;
}
int main() {
char s[] = " fly me to the moon ";
int count = countSegments(s);
printf("%d\n", count);
return 0;
}
上述代码中,countSegments 函数使用 strtok
函数遍历给定的字符串,将其按照空格分割,并统计子字符串的数量。该函数返回的结果为 5,即给定字符串中总共有 5 个子字符串。
strtok
函数的作用是将一个字符串分割成多个子字符串(即标记字符串),并返回第一个子字符串的指针。在使用 strtok
函数时,需要先提供一个要分割的字符串(例如 s
) 和一个分隔符(例如空格字符),strtok
函数将根据分隔符将字符串分割成多个子字符串,并按顺序返回分割后的每个子字符串的指针。
具体来说,第一次调用 strtok
函数时,需要提供待分割的字符串指针和分割符,strtok
函数会在给定字符串中查找第一个不为分割符的字符,并将其作为第一个子字符串的起始位置,然后查找下一个分割符(即空格字符),并将其替换为字符串结束符 \0
,使得该子字符串成为一个有效的 C 字符串。strtok
函数随后将记录下一个子字符串的起始位置(即第二个子字符串),并返回第一个子字符串的指针。
例如,在以下代码中,
char s[] = " fly me to the moon ";
char* p = strtok(s, " ");
第一次调用 strtok
函数将会将字符串 s
按照空格进行分割,第一个子字符串为 "fly",函数返回的指针 p 将指向该子字符串的起始位置。
以后每次调用 strtok
函数时,如果第一个参数为 NULL,则表示该函数会在上一次分割的位置继续查找下一个子字符串,并返回该子字符串的起始位置。因此,在使用 strtok
进行字符串分割时,可以通过多次调用 strtok
函数来遍历字符串中的所有子字符串。
split()
是一种字符串方法,用于将一个字符串按照指定的分隔符,分割成几个子字符串,然后将这些子字符串放到一个数组中返回。
split()
方法通常被用于处理文本数据,例如将 CSV 文件或 TSV 文件解析成具有结构性的数据。
split()
方法的使用方法如下:
string.split(separator, limit);
separator
:指定的字符串或正则表达式,用于确定分隔符(可以是单个字符或多个字符组成的字符串,也可以是正则表达式对象)。limit
(可选):一个整数值,用于指定分割出的最多子字符串数量。
split()
方法返回一个新的数组,包含分割后的字符串。如果分隔符未找到,则返回包含原始字符串的数组,即只有一个元素。
以下是 split()
方法的一个示例:
const str = 'one,two,three,four';
const arr = str.split(',');
console.log(arr);
// Output: ['one', 'two', 'three', 'four']
在这个示例中,split()
方法使用字符串 ','
作为分隔符将字符串 str
拆分成了一个字符串数组。
需要注意的是,不同的编程语言和不同的平台实现 split()
的方式可能有所不同。
const str = " fly me to the moon ";
const arr = str.split(' ');
console.log(arr);
这段代码的作用是将字符串 str
以空格字符(空格、制表符等)为分隔符进行拆分,然后将拆分后的字符串存储到数组 arr
中,并输出到控制台。
其中,使用 const
定义了一个字符串 str
,这个字符串包含了前后都带有空格的文本内容。使用 str.split(' ')
方法将字符串按照空格进行拆分,拆分出的每个子字符串作为数组的一个元素,将这些元素存储到数组 arr
中。
最后,调用 console.log(arr)
方法将数组 arr
输出到控制台,观察拆分后的结果。运行代码后,控制台显示如下内容:
['', '', '', 'fly', 'me', '', '', 'to', '', '', 'the', 'moon', '', '']
可以看到,拆分后的数组中包含了多个空字符串,这是因为在原字符串中存在多个连续的空格字符。如果要去掉这些空字符串,可以使用 filter()
方法过滤掉这些空字符串,例如:
const str = " fly me to the moon ";
const arr = str.split(' ').filter(str => str.length > 0);
console.log(arr);
在这段代码中,除了使用 split()
方法将字符串拆分成数组之外,还使用 filter()
方法将空字符串过滤掉。最终输出的结果是:
['fly', 'me', 'to', 'the', 'moon']
这里使用了回调函数(函数表达式)作为 filter()
方法的参数,对数组的每个元素进行检查,保留长度大于 0 的元素,并将结果作为一个新的数组返回。