E154、自定义函数:字符串(二维字符数组)的排序 编写自定义函数 void sort ( char s[ ] [ 10 ] , int n ) 将一组字符串按升序排序。 函数说明:所有的字符串保存在二维字符数组s中,每个字符串的长度<10,字符串的个数为n 用于测试函数的程序: #include<stdio.h> int main() { char a[ ][ 10 ] = { "dog", "ant", "bee", "cat" } ; char b[ ][ 10 ] = { "9", "10000", "2 0" } ; int i ; sort ( a, 4 ) ; sort ( b, 3 ) ; for ( i = 0 ; i<4 ; i=i+1 ) printf(" %s \n" , a[ i ] ) ; for ( i = 0 ; i<3 ; i=i+1 ) printf(" %s \n" , b[ i ] ) ; } 程序运行后,如果输出 ant bee cat dog 10000 2 0 9 则表明你写的 sort 函数是正确的
时间: 2024-01-09 10:05:07 浏览: 76
好的,以下是自定义函数 void sort ( char s[ ] [ 10 ] , int n ) 的代码实现:
```
void sort(char s[][10], int n) {
int i, j;
char temp[10];
for (i = 0; i < n - 1; i++) {
for (j = i + 1; j < n; j++) {
if (strcmp(s[i], s[j]) > 0) {
strcpy(temp, s[i]);
strcpy(s[i], s[j]);
strcpy(s[j], temp);
}
}
}
}
```
这个函数的实现采用了选择排序的思想,对于每个字符串,都将其与后面的字符串进行比较,如果前面的字符串大于后面的字符串,则交换它们的位置。最终,字符串数组中的字符串就按升序排列了。
相关问题
C语言编写函数对字符串排序,要求使用二维数组作为参数。
在C语言中,对字符串数组进行排序,可以使用内置的qsort函数,但是直接对二维数组进行排序可能会有些复杂,因为我们需要先处理每个元素,也就是每个字符串。这里我们可以设计一个自定义的比较函数,接受两个字符串指向的二维数组元素进行比较,然后调用qsort。
首先,定义一个用于比较字符串的辅助函数,比如`strcmp`的变体,假设叫`compare_strings`:
```c
#include <stdio.h>
#include <string.h>
int compare_strings(char (*str1)[MAX_STR_LEN], char (*str2)[MAX_STR_LEN]) {
return strcmp(str1[0], str2[0]);
}
```
接下来,定义主函数,使用qsort和提供的二维数组:
```c
#define MAX_STR_LEN 100
void sort_strings(char strings[][MAX_STR_LEN], int num_elements) {
qsort(strings, num_elements, sizeof(char[MAX_STR_LEN]), compare_strings);
}
int main() {
// 示例二维数组
char string_array[][MAX_STR_LEN] = {"banana", "apple", "cherry", "date"};
int elements = sizeof(string_array) / sizeof(string_array[0]);
sort_strings(string_array, elements);
// 输出排序后的数组
for (int i = 0; i < elements; ++i) {
printf("%s\n", string_array[i]);
}
return 0;
}
```
在这个例子中,我们假设数组中的每个字符串长度都小于等于`MAX_STR_LEN`,并且整个数组的元素个数已经预先计算好传递给`sort_strings`函数。这个函数会按照首字母顺序对字符串数组进行升序排序。
编写函数对字符串进行排序,要求使用二维数组作为参数。C语言
在C语言中,你可以编写一个函数来对二维字符数组按照某种规则进行排序。这里我将演示如何按字母顺序对行内的字符进行升序排列。假设我们有一个包含字符串的二维数组,我们可以使用嵌套循环和标准库函数`strcmp()`来实现这个功能。
```c
#include <stdio.h>
#include <string.h>
// 函数声明
void sort_strings(char strings[][MAX_STR_LENGTH], int rows);
#define MAX_STR_LENGTH 50 // 字符串最大长度
void sort_strings(char strings[][MAX_STR_LENGTH], int rows) {
for (int i = 0; i < rows - 1; i++) {
for (int j = 0; j < rows - i - 1; j++) {
if (strcmp(strings[j], strings[j + 1]) > 0) { // 如果前一个字符串大于后一个
// 使用strcpy临时存储,避免直接交换导致覆盖原数据
char temp[MAX_STR_LENGTH];
strcpy(temp, strings[j]);
strcpy(strings[j], strings[j + 1]);
strcpy(strings[j + 1], temp);
}
}
}
}
int main() {
char str_array[5][MAX_STR_LENGTH] = {"banana", "apple", "orange", "grape", "mango"};
int num_rows = sizeof(str_array) / sizeof(str_array[0]);
printf("Before sorting:\n");
for (int i = 0; i < num_rows; i++) {
printf("%s\n", str_array[i]);
}
sort_strings(str_array, num_rows);
printf("\nAfter sorting:\n");
for (int i = 0; i < num_rows; i++) {
printf("%s\n", str_array[i]);
}
return 0;
}
```
阅读全文