请使用c语言使得输入第一行输入测试次数t,t表示测试的组数,然后输入每组的测试数据,测试数据为一行字符串,最后对每组数据输出字符串中按顺序出现的碎片和所有碎片的平均长度(所有碎片的平均长度 = 所有碎片长度之和/碎片个数,且相同碎片只输出一次,平均长度保留2位小数)。
时间: 2024-02-20 16:59:35 浏览: 62
好的,我可以帮你写出来。以下是代码实现:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 1005 // 定义字符串最大长度
int main() {
int t; // 测试组数
scanf("%d", &t);
getchar(); // 去除输入数字后面的换行符
while (t--) {
char str[MAX_LEN];
fgets(str, MAX_LEN, stdin); // 读取一行字符串
int len = strlen(str);
if (str[len - 1] == '\n') {
str[len - 1] = '\0'; // 去除读入的换行符
len--;
}
int count = 0; // 记录碎片个数
double sum_len = 0.0; // 记录所有碎片长度之和
char *p = strtok(str, " "); // 使用空格分割字符串
while (p != NULL) {
int flag = 1; // 判断是否为新的碎片
for (int i = 0; i < count; i++) {
if (strcmp(p, &str[i * (strlen(p) + 1)]) == 0) { // 判断是否已存在该碎片
flag = 0;
break;
}
}
if (flag) { // 如果是新的碎片
count++;
sum_len += strlen(p);
printf("%s ", p);
}
p = strtok(NULL, " "); // 继续寻找下一个碎片
}
printf("%.2f\n", sum_len / count); // 输出所有碎片的平均长度
}
return 0;
}
```
代码思路如下:
1. 先输入测试组数 t;
2. 对于每组测试数据,使用 fgets 函数读取一行字符串,然后去除读入的换行符;
3. 使用 strtok 函数按空格分割字符串,对于每个碎片,判断是否为新的碎片,并记录所有碎片的长度之和;
4. 输出所有碎片并计算平均长度。
希望对你有所帮助!
阅读全文