使用strtok函数和split函数来分割字符串

使用 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 的元素,并将结果作为一个新的数组返回。

猜你喜欢

转载自blog.csdn.net/weixin_48060069/article/details/130026910
今日推荐