在C和C++中如何用反斜杠做分隔符分割字符串并取指定片段?
问题解答
反斜杠转义问题处理
你遇到的转义问题需要分两个场景分别处理:
- 字符串字面量定义场景:C语言中字符串字面量里的单个
\会被识别为转义符,要表示一个真实存在的反斜杠字符,必须连续写两个\。你示例中的字符串写在代码里需要定义为"abc\\asd\\zxc\\12as",否则\a会被识别为响铃控制符、\12会被识别为八进制转义字符,最终字符串内容和你预期的完全不符。 - strtok分隔符参数场景:给
strtok()传分隔符参数时,同样需要转义反斜杠,分隔符参数要写为"\\",才能让strtok()识别到你要使用单个反斜杠作为分割标记。
直接获取第三个分割结果的方法
strtok()的调用规则是首次调用传入目标字符串指针,后续每次调用传入NULL即可按顺序获取下一个分割结果。要直接拿第三个结果,连续调用三次strtok()即可,前两次的返回值可以不用处理。
注意要做好非空判断,避免分割结果不足3个时触发空指针访问问题。
完整示例代码
#include <stdio.h> #include <string.h> int main() { // 定义字符串时转义反斜杠 char str[] = "abc\\asd\\zxc\\12as"; char *token; // 第一次调用,获取第一个词 token = strtok(str, "\\"); // 第二次调用,获取第二个词 token = strtok(NULL, "\\"); // 第三次调用,获取第三个词 token = strtok(NULL, "\\"); if (token != NULL) { printf("第三个分割结果是:%s\n", token); } else { printf("分割结果不足3个\n"); } return 0; }
额外注意事项
strtok()会修改原字符串的内容,会把分隔符位置替换为\0,如果需要保留原字符串,要先把原字符串拷贝到一份可修改的独立内存中再执行分割操作。strtok()会自动跳过连续的分隔符,不会返回空字符串的分割结果。
内容的提问来源于stack exchange,提问作者Prajwal Kumar
相关产品推荐
相关产品推荐

