5.完善下面的程序:从键盘输入n (n<10) 个不重复的字符串,找出其中最小的字符串,将其与第一个字符串对换,其他字符串不动。在方框中填写语句,将程序补充完整,并对完善后的程序加上适当的注释。
时间: 2024-12-24 18:42:13 浏览: 13
为了完善这个程序,你需要遍历输入的字符串数组,找到最小值,然后将其与第一个元素交换位置。下面是使用C语言完成此任务的一个示例:
```c
#include <stdio.h>
#include <string.h> // 引入string.h库,用于字符串操作
#define MAX_STRINGS 10 // 最大字符串数量
#define MIN_STRING_LENGTH 1 // 字符串长度的最小值
// 完善后的程序
int main() {
char strings[MAX_STRINGS][MIN_STRING_LENGTH]; // 声明字符串数组
int n, i;
// 从键盘输入字符串数量
printf("Enter the number of unique strings (n < 10): ");
scanf("%d", &n);
// 检查输入是否有效
if (n > MAX_STRINGS) {
printf("错误:输入的字符串数量超过限制 (%d)\n", MAX_STRINGS);
return 1;
}
// 从键盘输入不重复的字符串
for (i = 0; i < n; ++i) {
printf("Enter string %d: ", i + 1);
fgets(strings[i], sizeof(strings[i]), stdin); // 读取用户输入直到遇到换行符
strings[i][strcspn(strings[i], "\n")] = '\0'; // 移除fgets留下的换行符
}
// 找出最小的字符串
int min_index = 0;
for (i = 1; i < n; ++i) {
if (strlen(strings[min_index]) > strlen(strings[i])) { // 如果当前字符串更短,更新最小索引
min_index = i;
}
}
// 将最小字符串与第一个字符串交换
char temp[strings[min_index][0] + 1]; // 创建临时缓冲区
strcpy(temp, strings[min_index]); // 备份最小字符串到临时缓冲区
strcpy(strings[min_index], strings[0]); // 将第一个字符串移到原位置
strcpy(strings[0], temp); // 将临时缓冲区的内容放回第一个位置
// 输出修改后的字符串数组
printf("Modified array of strings:\n");
for (i = 0; i < n; ++i) {
printf("%s ", strings[i]);
}
return 0;
}
```
在这个程序中,我们首先输入字符串的数量,然后依次获取每一个字符串并存放在数组中。接着通过比较字符串长度找到最小的字符串,最后将它与第一个字符串的位置互换。在输出修改后的数组之前,我们还移除了换行符,因为`fgets`会保留最后一个字符。
阅读全文