以下に示すような文字列の配列(2次元配列)をソートする関数を作成せよ。関数の中ではqsort 関数を用いること。 char s1 [][7] = {"LISP", "C", "Ada", "Pascal"}; char s2 [][4] = {"500", "S", "GST"}; 関数の形式は自分で考えること。なお、昇順にソートする関数と降順にソートする関数の二つを作成すること。 |
/* 演習8-7 文字列の配列(2次元配列)を昇順にソート */ #include <stdlib.h> #include <string.h> /*--- 文字列の配列(n1×n2の2次元配列)を昇順にソート ---*/ void strsort(char *p, int n1, int n2) { qsort(p, n1, n2, (int(*)(const void*, const void*))strcmp); } #include <stdio.h> int main(void) { int i; char s1[][7] = {"LISP", "C", "Ada", "Pascal"}; char s2[][4] = {"500", "S", "GST"}; /*--- 2次元配列s1をソート ---*/ puts("□ ソート前"); for (i = 0; i < sizeof(s1) / sizeof(s1[0]); i++) printf("s1[%d] = %s\n", i, s1[i]); strsort((char *)s1, sizeof(s1) / sizeof(s1[0]), sizeof(s1[0]) / sizeof(s1[0][0])); puts("\n□ ソート後"); for (i = 0; i < sizeof(s1) / sizeof(s1[0]); i++) printf("s1[%d] = %s\n", i, s1[i]); putchar('\n'); putchar('\n'); /*--- 2次元配列s2をソート ---*/ puts("□ ソート前"); for (i = 0; i < sizeof(s2) / sizeof(s2[0]); i++) printf("s2[%d] = %s\n", i, s2[i]); strsort((char *)s2, sizeof(s2) / sizeof(s2[0]), sizeof(s2[0]) / sizeof(s2[0][0])); puts("\n□ ソート後"); for (i = 0; i < sizeof(s2) / sizeof(s2[0]); i++) printf("s2[%d] = %s\n", i, s2[i]); return (0); }