分割字符串的的函数 C语言
时间: 2024-10-24 08:11:12 浏览: 29
在C语言中,你可以使用`strtok()`函数来分割字符串。这是一个内建的库函数,它会按照指定的分隔符将字符串分解成一系列的子串。`strtok()`有两个版本:
1. `char * strtok(char *str, const char *delim)`:这是基本版本,接收两个参数,第一个是要分割的原始字符串,第二个是分隔符。函数首次调用时,`str`应该包含完整的字符串,后续调用时,可以传入`NULL`,函数会在内存池中继续查找下一个分隔符。
```c
char str[] = "Hello,World! This is a test.";
char *token;
token = strtok(str, ", ! ");
while (token != NULL) {
printf("%s\n", token);
token = strtok(NULL, ", ! ");
}
```
2. `char * strtok_r(char *str, const char *delim, char **save_ptr)`:这是一个线程安全版本,接受额外的指针`save_ptr`,用于保存上次结束的位置,以便下次迭代从该位置开始。
如果你想自己编写一个函数来进行分割,也可以这样做,例如,以下是一个简单版本的分割函数,仅支持单个空格作为分隔符:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char** split_string(const char* str, int max_tokens) {
char* tokens[max_tokens];
char* current_token = strtok(str, " ");
int count = 0;
while (current_token != NULL) {
tokens[count++] = current_token;
current_token = strtok(NULL, " ");
}
if (count > max_tokens) {
fprintf(stderr, "Too many tokens found, exceeding %d allowed.", max_tokens);
return NULL;
}
// 将最后一个NULL替换为实际的终止符,方便遍历数组
tokens[count] = NULL;
return tokens;
}
int main() {
char str[] = "This is a test string";
char** result = split_string(str, 3);
for (const char** token = result; *token != NULL; ++token) {
printf("%s\n", *token);
}
free(result); // 别忘了释放动态分配的内存
return 0;
}
```
阅读全文