字符串中有"GET_OK","A:"后面携带一串数字,"B:"后面携带一串数字,"C:"后面携带一串数字,"A:""B:""C:"的顺序是随机的,C语言提取出“GET_OK”和每一段数字
时间: 2024-06-08 07:04:09 浏览: 79
在C语言中,提取字符串中的特定模式(如"GET_OK"和三个段的数字)并考虑到它们的顺序可能随机,你可以使用字符串处理函数,如`strstr()`、`strtok()`或者`strrchr()`来找到特定的子串,然后利用`strtol()`或`sscanf()`转换数字部分。以下是一个简单的示例,展示如何完成这个任务:
```c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char* extract(const char* str) {
const char* start = strstr(str, "GET_OK"); // 找到"GET_OK"的位置
if (!start) {
return NULL; // 如果没找到,返回NULL
}
// 使用'['作为分隔符,找到"A:", "B:", "C:"
char* sep = {"[", "]", "["};
for (int i = 0; i < 3; ++i) {
start = strchr(start + strlen("GET_OK"), sep[i]); // 找到下一个分隔符
if (!start) {
return NULL;
}
*start++ = '\0'; // 替换分隔符为'\0',结束子串
}
// 提取并转换每个数字部分
char* num1 = start;
char* num2 = strchr(num1, '[');
char* num3 = strchr(num2, '[');
long long int a = strtoll(num1, NULL, 10); // 数字A
long long int b = strtoll(num2 + 1, NULL, 10); // 数字B,+1跳过[
long long int c = strtoll(num3 + 1, NULL, 10); // 数字C,+1跳过[
return (char*)malloc(sizeof(char) * (strlen(start) + 1)); // 分配内存保存结果,并复制剩余字符串
}
int main() {
char str[] = "GET_OK:123[A:456][B:789][C:101112]";
char* result = extract(str);
if (result) {
printf("Extracted: %s\n", result);
free(result); // 释放内存
} else {
printf("Pattern not found in the string.\n");
}
return 0;
}
```
阅读全文