c语言实现对输入的字符串如5v5 adc进行区分,将空格前面的给结构体a、后面的给结构体b
时间: 2024-10-23 15:09:58 浏览: 20
在 C 语言中,为了区分输入字符串 "5v5 adc" 这样的形式,并将其分割成两部分分别存储到结构体 A 和结构体 B 中,可以使用 `strtok()` 函数配合结构体来实现。这里假设我们有两个结构体:
```c
#include <stdio.h>
#include <string.h>
// 结构体 A (保存数字)
typedef struct {
int value;
} AStruct;
// 结构体 B (保存剩余的字符)
typedef struct {
char* name;
} BStruct;
void parseString(char* input, AStruct* a, BStruct* b) {
// 使用空格作为分隔符
char* token = strtok(input, " ");
if (token != NULL) {
// 把第一个数字赋值给结构体 A 的 value
sscanf(token, "%d", &a->value);
// 如果还有剩余的字符串,继续处理
while ((token = strtok(NULL, " ")) != NULL) {
b->name = realloc(b->name, strlen(token) + 1); // 预分配内存
strcpy(b->name, token); // 存储字符
}
} else {
printf("Invalid input format.\n");
}
}
int main() {
AStruct a;
BStruct b;
char input[] = "5v5 adc";
parseString(input, &a, &b);
printf("AStruct: Value = %d\n", a.value);
printf("BStruct: Name = %s\n", b.name);
// 释放额外分配的内存,防止内存泄漏
free(b.name);
return 0;
}
```
在这个示例中,`parseString` 函数会首先获取并解析出结构体 A 的值,然后在剩余的字符串上连续应用 `strtok` 直到整个输入字符串结束。如果输入不符合预期(例如缺少数字),程序会打印错误消息。
阅读全文