字符串分割函数strtok():
头文件:#include <cstring>
函数原型:char *strtok(char *str, const char *delimiters);
函数功能:分割字符串,将str分割成一个个子串
函数参数:
str: 在第一次被调用的时候str传入需要被分割字符串的首地址;在后面调用的时候传入NULL。
delimiters: 表示分割字符串中包含的所有字符。
函数返回值:
当s中的字符查找到末尾时,返回NULL;
如果查不到delimiters所标示的字符,则返回当前strtok的字符串的指针。
需要注意的是:使用该函数进行字符串分割时,会破坏并分解字符串的完整,调用前和调用后的str已经不一样了。strtok在切割字符串的时候,实际上就是将分割符的字符delimiter替换为'\0'并且返回首地址。这点在下面会有例子说明。
例一:分割单个字符
(1)将字符串通过'@'分割开:
#include <bits/stdc++.h>
using namespace std;
int main()
{
char str[] = "@I am@a great@young man@!";
char *temp = strtok(str, "@");
while (temp)
{
cout << temp << endl;
temp = strtok(NULL, "@");
}
return 0;
}
运行结果:
I am
a great
young man
!
(2)下面我们来观察一下调用strtok()函数之后的str会是什么样的:
#include <bits/stdc++.h>
using namespace std;
int main()
{
char str[] = "@I am@a great@young man@!";
char *temp = strtok(str, "@");
while (temp)
{
cout << temp << endl;
temp = strtok(NULL, "@");
}
for (int i = 0; i < sizeof(str); i++)
cout << str[i];
return 0;
}
我们发现调用完strtok函数后再输出的完整的str是:
@I am a great young man !
例一总结:strtok在分割字符串的过程,实际上就是将被分割的字符串的分割字符替换为'\0' 并且返回标记字符串的首地址,直到返回NULL结束。调用完strtok后,如果只是直接输出str,而不是像上面一样将所有的字符都输出,则输出的是@I am。但需要注意的是,此处有点特殊,因为有一个分割符在字符串首位,所以第一个@没被替换,后面的@全部被替换;但如果第一位不是分割字符,则后面的分割符也是全部被替换为'\0',而不是第一个分割符不被替换。
例二:分割多个字符
将字符串通过'@'和'!'分割开:
#include <bits/stdc++.h>
using namespace std;
int main()
{
char str[] = "I!am@a!great@young!man.!";
char *temp = strtok(str, "@!");
while (temp)
{
cout << temp << endl;
temp = strtok(NULL, "@!");
}
return 0;
}
可以看出,只需要将分割字符全部放到一个字符串里即可,如"@!"。
本文详细解析C++中的字符串分割函数strtok(),包括其头文件、函数原型、参数、返回值及注意事项。通过两个实例演示如何使用strtok()分割单个和多个字符,展示分割过程对字符串的影响。
396

被折叠的 条评论
为什么被折叠?



