描述 一个服务配置文件是文本的,包含多个子服务配置。每个配置项由“;”号间隔。配置项第一个点前是子服务名称,请把配置项按不同子服务分别解析打印出来。不同配置项以换行\r\n分开。要求考虑配置项中可能存在不合法的配置,比如配置主键或者值没有写,要考虑过滤掉不合法的配置项,具有容错性。 输入描述 比如下面配置: service1.host=192.168.1.1;service1.port=8080;service2.host=192.168.1.2;service2.port=8081; 这里包含两个子服务service1和service2, 输出描述 service1: host=192.168.1.1 port=8080 service2: host=192.168.1.2 port=8081。使用C语言实现
时间: 2024-02-18 18:59:17 浏览: 61
配置文件V2.0版本,主要使用C语言实现
以下是使用 C 语言实现的代码,可以实现对输入的配置文件进行解析,提取不同子服务的配置项并打印出来。
```c
#include <stdio.h>
#include <string.h>
#define MAX_LINE_LEN 100
#define MAX_SUBSERVICES 10
int main() {
char config[MAX_LINE_LEN]; // 存储读入的配置文件
char *subservices[MAX_SUBSERVICES]; // 存储所有子服务的名称
int subservice_count = 0; // 子服务个数
char *key_value_pairs[MAX_SUBSERVICES][MAX_LINE_LEN / 2]; // 存储每个子服务的键值对
int key_value_counts[MAX_SUBSERVICES] = {0}; // 每个子服务的键值对个数
// 读入配置文件
fgets(config, MAX_LINE_LEN, stdin);
// 按分号分割配置项
char *token = strtok(config, ";");
while (token != NULL) {
// 按等号分割键和值
char *key = strtok(token, ".");
char *value = strtok(NULL, "=");
if (key != NULL && value != NULL) {
// 找到对应的子服务,如果不存在则创建一个新的子服务
int i;
for (i = 0; i < subservice_count; i++) {
if (strcmp(subservices[i], key) == 0) {
break;
}
}
if (i == subservice_count) {
subservices[subservice_count] = key;
subservice_count++;
}
// 添加键值对到对应的子服务中
key_value_pairs[i][key_value_counts[i]] = value;
key_value_counts[i]++;
}
token = strtok(NULL, ";");
}
// 打印每个子服务的键值对
int i, j;
for (i = 0; i < subservice_count; i++) {
printf("%s: ", subservices[i]);
for (j = 0; j < key_value_counts[i]; j++) {
printf("%s ", key_value_pairs[i][j]);
}
printf("\n");
}
return 0;
}
```
注意,上述代码只是一个简单的实现,可能存在性能问题和不足之处,需要根据实际情况进行优化。
阅读全文