1.C风格字符串分割
原型: char *strtok(char *str, const char *delim);
功能:分解字符串为一组字符串。
参数说明:str为要分解的字符串,delim为分隔符字符串。
返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。
其它:strtok函数线程不安全,可以使用strtok_r替代。
示例:
其中我有不解的地方:p=strtok(NULL,d);
strtok函数的功能是把一个字符串由指定的分隔符分成更小的字符串。
例如:”this is a demo”用” “(空格)来分隔,就可以得到”this”,”is”,”a”,”demo”四个单词。
strtok的用法:
第一步:初始化
strtok(“this is a demo”,” “);
第二步:得到其它的子字符串
strtok(NULL,” “);
每执行一次第二步就可以得到一个子字符串,直到返回NULL,表示查找结束。
首次调用result = strtok( str, delims );时,内部有个static char *result指针指向了str运行后result指向了now后的“,”之后的循环 result = strtok( NULL, delims ); 可以看成if参数==NULL 仍然使用上次的“,”位置(存在静态变量中)开始继续找,直到找到下一个分隔符“,”。 反复以NULL做参数,找到输出所有的“,”
2.C++类类型字符串分割
涉及到string类的两个函数find和substr:
1、find函数
原型:size_t find ( const string& str, size_t pos = 0 ) const;
功能:查找子字符串第一次出现的位置。
参数说明:str为子字符串,pos为初始查找位置。
返回值:找到的话返回第一次出现的位置,否则返回string::npos
2、substr函数
原型:string substr ( size_t pos = 0, size_t n = npos ) const;
功能:获得子字符串。
参数说明:pos为起始位置(默认为0),n为所选字符串个数(默认为npos)
返回值:子字符串
解释:
1.std::string s=str.substr(i,pos-i)从i开始有pos-i个字符
2. i=pos+pattern.size()-1要从pattern的下一个字符开始,所以+pattern.size(),又-1的原因是循环会i++,所以提前要-1;
3. str+=pattern;//扩展字符串以方便操作,这是为了方便取最后的一段子串,这样不需要对最后一段特殊处理。