如何使用C语言编程,通过指针来接收用户输入的三个字符串,并按照字典序从小到大排序后依次输出?
时间: 2024-12-10 08:28:55 浏览: 13
在C语言中,你可以通过以下几个步骤来实现这个功能:
1. 定义并初始化动态内存,用于存储用户输入的三个字符串。因为不知道字符串长度,可以使用`malloc`函数分配足够的空间。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STR_LEN 100 // 最大字符串长度
int main() {
char* str1 = malloc(MAX_STR_LEN * sizeof(char)); // 存储第一个字符串
char* str2 = malloc(MAX_STR_LEN * sizeof(char)); // 存储第二个字符串
char* str3 = malloc(MAX_STR_LEN * sizeof(char)); // 存储第三个字符串
// 接收用户输入
printf("请输入三个字符串: ");
fgets(str1, MAX_STR_LEN, stdin); // 要去除换行符,可以使用strtok()
fgets(str2, MAX_STR_LEN, stdin);
fgets(str3, MAX_STR_LEN, stdin);
}
```
2. 对接收到的字符串进行字典序比较,这里我们需要两个辅助函数,一个用于比较字符串,另一个用于交换字符串。
```c
// 比较两个字符串的字典序
int compareStrings(const char* a, const char* b) {
int len = strlen(a);
if (len != strlen(b)) return len > strlen(b); // 如果长度不同,直接返回
for (int i = 0; i < len; ++i) {
if (a[i] > b[i]) return 1;
else if (a[i] < b[i]) return -1;
}
return 0; // 字典序相等
}
// 交换两个字符串的内容
void swapChars(char** p, char* q) {
char temp[50];
strcpy(temp, *p);
strcpy(*p, *q);
strcpy(*q, temp);
}
```
3. 使用`qsort`函数对字符串数组进行排序,传入`compareStrings`作为比较函数。
```c
// 排序字符串数组
void sortStrings(char** arr, int n) {
qsort(arr, n, sizeof(char*), compareStrings);
}
int main() {
... // 之前的用户输入部分
sortStrings(&str1, 1);
sortStrings(&str2, 1);
sortStrings(&str3, 1);
// 输出排序后的字符串
printf("按字典序排列后的字符串:\n");
printf("%s\n", str1);
printf("%s\n", str2);
printf("%s\n", str3);
free(str1);
free(str2);
free(str3);
return 0;
}
```
注意:上述代码示例假设用户输入的都是有效的字符串。在实际应用中,还需要考虑处理非法输入、空字符串等情况以及释放内存防止内存泄漏。
阅读全文