字符串分割情况
- 读取文件时,C++识别的是空格和换行符,但有时候文件是以符号分割的,如逗号等
- 字符串本身含有特殊符号,如逗号,@等
strtok()函数
strtok()函数能够按照特定的字符分解字符串为一个个子字符串, 在头文件#include<string.h>中
strtok()函数原型
char *strtok(char s[], const char *delim);
参数说明:
- s为要分解的字符,字符数组,不是string字符串,这里要注意
- delim表示分割的字符,这里是字符指针,注意!!
如果是string类型,需要对其转换为char类型,才能使用!!!
调用说明:
- 首次调用时,s为要分解的字符串
- 非首次调用时,需要将s参数设为NULL
- 首次调用时,strtok会忽略起始位置开始的分隔符,即若第一个字符是分割符,会被忽略掉
strtok()函数的原理
- strtok()在参数s的字符串中发现参数delim中包含的分割字符时,则会将该字符改为\0字符。在第一次调用时,strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL。每次调用成功则返回指向被分割出片段的指针
- 返回值
当s中的字符查找到末尾时,返回NULL。
如果查找不到delim中的字符时,返回当前strtok的字符串的指针。
- strtok()函数修改了字符串s的,所以s字符串不能为常量字符串
strtok()函数分割字符串实例
#include<iostream>
#include<string>
using namespace std;
int main()
{
char str[] = "北京@重庆@深圳@广州";
char *p;
cout << "原始字符串为:\n\n" << str << endl;
cout << endl;
cout << "分割后的字符串为:\n" << endl;
p = strtok(str, "@");
while (p)
{
cout << p << " ";
p = strtok(NULL, "@");
}
return 0;
}
运行结果