3.字符串排序:在主函数中输入10个不等长的字符串放入二维字符数组中,编写函数sort()利用指针数组对其排序,在主函数中输出排好序的字符串。 函数原型为:void sort(char *s [ ]);
时间: 2024-12-23 22:12:11 浏览: 4
在C语言中,对字符串进行排序通常涉及到字符串数组的处理,可以借助于qsort(标准库函数)或者自定义的比较函数来实现。不过,由于题目要求使用指针数组并直接在函数内部完成排序,这里我们可以创建一个简单的冒泡排序算法示例,因为冒泡排序易于理解和实现,并且可以用指针操作。
首先,我们需要一个函数`compare`作为qsort的比较函数,它会判断两个字符串的字典顺序:
```c
int compare(const void *a, const void *b) {
char *str1 = (char *)a;
char *str2 = (char *)b;
return strcmp(str1, str2);
}
```
接下来,是`sort`函数,它接收一个指向字符数组的指针,然后通过qsort排序整个数组:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 自定义比较函数
int compare(const void *a, const void *b) {
// 使用strcmp进行字符串比较
return strcmp(*(char **)a, *(char **)b);
}
void sort(char s[][100], int n) {
char **ptrArr = (char **)malloc(n * sizeof(char *));
for (int i = 0; i < n; i++) {
ptrArr[i] = &s[i][0];
}
qsort(ptrArr, n, sizeof(char *), compare);
// 将排序后的字符串复制回原始二维数组
for (int i = 0; i < n; i++) {
strcpy(s[i], ptrArr[i]);
}
free(ptrArr);
}
int main() {
int n = 10;
char s[n][100];
// 输入10个不等长的字符串
for (int i = 0; i < n; i++) {
printf("Enter string %d: ", i + 1);
fgets(s[i], sizeof(s[i]), stdin);
s[i][strcspn(s[i], "\n")] = '\0'; // 移除换行符
}
sort(s, n);
// 输出排序后的字符串
for (int i = 0; i < n; i++) {
printf("%s\n", s[i]);
}
return 0;
}
```
阅读全文