不要用strtok()函数
时间: 2024-11-12 13:41:08 浏览: 3
如果你不想使用`strtok()`函数,可以考虑手动遍历字符串,每次遇到`'|'`就停止,并把之前的部分转换为整数存入数组。下面是一个不用`strtok()`的例子:
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h> // 需要ctype头文件用于判断字符
#define MAX_TOKENS 100
void split_string(char *input, int arr[]) {
char *token = input;
int index = 0;
while ((token = strchr(token, '|')) != NULL) { // 查找下划线的位置
token++; // 移动到下一个字符
// 获取从输入开始到当前`|`前的所有数字
int num = 0;
while (isdigit((unsigned char)*token)) {
num = num * 10 + *token - '0';
token++;
}
arr[index++] = num; // 存储整数
token += isblank(*token) ? 1 : 0; // 跳过空格(如果有)
}
// 检查最后一个元素(如果没有分隔符)
if (*token == '\0') {
arr[index] = atoi(token); // 如果还有剩余的数字,将其转换为整数
} else {
arr[index] = -1; // 或者设置一个特殊值表示结束(例如,-1)
}
}
int main() {
char input[] = "1150163|1126965|1126965|1141943|24041341|49320961011|221|208|1117241|20241031";
int arr[MAX_TOKENS];
split_string(input, arr);
if (arr[MAX_TOKENS - 1] != -1) {
printf("Split string into %d elements:\n", MAX_TOKENS);
for (int i = 0; i < MAX_TOKENS; i++) {
printf("%d ", arr[i]);
}
printf("\n");
} else {
printf("Parsed only %d valid elements.\n", MAX_TOKENS - 1);
}
return 0;
}
```
这个版本的代码遍历整个字符串,找到每个`'|'`之间的数字并存储。注意最后部分检查输入字符串是否有超过`MAX_TOKENS`个元素。
阅读全文