C语言字符串的分割

使用一个函数strtok()

分解字符串为一组字符串。第一个参数为要分解的字符串,第二个为分隔符字符串。首次调用时,第一个参数指向要分解的字符串,之后再次调用要将其设成NULL。

            LPSTR lp;
//			lp=strchr(lp,' ')+1;
			lp=strtok("abc def ghi"," ");
            printf("%s\n",lp);
			lp=strtok(NULL," ");
			printf("%s\n",lp);
			lp=strtok(NULL," ");
            printf("%s\n",lp);

最后输出

abc

def

ghi



### C语言中使用 `strtok` 实现字符串分割 在C语言中,`strtok` 是标准库 `<string.h>` 中提供的一个函数,用于将字符串按照指定的分隔符进行分割。它的工作原理是通过修改原始字符串,将找到的分隔符替换为 `\0`,从而将字符串分割为多个子串。需要注意的是,`strtok` 会破坏原始字符串的内容,因此通常建议在副本上操作。 ```c #include <stdio.h> #include <string.h> int main() { char str[] = "apple,banana,orange,grape"; const char delimiters[] = ","; // 第一次调用,传入原始字符串 char* token = strtok(str, delimiters); // 后续调用,传入 NULL 以继续分割同一字符串 while (token != NULL) { printf("%s\n", token); token = strtok(NULL, delimiters); } return 0; } ``` 上述代码会将字符串 `"apple,banana,orange,grape"` 按照逗号 `,` 分割,并依次打印出每个子串。 需要注意的是,`strtok` 是一个不可重入的函数,这意味着它在多线程环境下或嵌套调用时可能会出现问题。如果需要线程安全的版本,可以使用 `strtok_r`(POSIX标准)或 `strtok_s`(Windows平台)。 ### 自定义实现字符串分割函数 为了更好地理解 `strtok` 的工作原理,也可以手动实现一个简单的字符串分割函数。下面是一个自定义的实现示例: ```c #include <stdio.h> #include <string.h> char* my_strtok(char* str, const char* delimiters) { static char* last_token = NULL; // 保存上一次的位置 // 如果传入新的字符串,则更新 last_token if (str != NULL) { last_token = str; } // 如果 last_token 为 NULL,表示没有更多标记 if (last_token == NULL || *last_token == '\0') { return NULL; } char* token_start = last_token; // 找到第一个不属于分隔符的字符 while (*last_token != '\0' && strchr(delimiters, *last_token) != NULL) { last_token++; } token_start = last_token; // 找到下一个分隔符,并将其替换为 '\0' while (*last_token != '\0' && strchr(delimiters, *last_token) == NULL) { last_token++; } if (*last_token != '\0') { *last_token++ = '\0'; // 将分隔符替换为 '\0',并移动指针 } else { last_token = NULL; // 字符串结束 } return token_start; } int main() { char str[] = "apple,banana,orange,grape"; const char delimiters[] = ","; char* token = my_strtok(str, delimiters); while (token != NULL) { printf("%s\n", token); token = my_strtok(NULL, delimiters); } return 0; } ``` 此自定义函数模仿了 `strtok` 的行为,使用静态变量 `last_token` 来保存上一次分割的位置,并通过修改原始字符串来实现分割功能。 ### 使用 `strtok` 的注意事项 1. **字符串不可变性**:`strtok` 会修改原始字符串,因此在使用时应确保字符串是可修改的(如局部数组或动态分配的内存)。 2. **线程安全性**:`strtok` 不是线程安全的,若需在多线程环境中使用,应选择 `strtok_r` 或 `strtok_s`。 3. **分隔符灵活性**:`strtok` 支持多个分隔符,可以通过传入包含多个分隔符的字符串来实现更灵活的分割逻辑[^1]。 ### 示例输出 对于输入字符串 `"apple,banana,orange,grape"` 和分隔符 `","`,程序将输出: ``` apple banana orange grape ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值