#include<stdio.h> #include<stdlib.h> #include<assert.h> #include<stdbool.h> #include<string.h> bool is_dic(char** Str, int n)//判断是否按照字典序 { //比较第i行的单词和第i+1行的单词是否是按照字典序 for (int i = 0; i < n - 1; i++) { if (strcmp(Str[i], Str[i + 1]) > 0) { return false; } } return true; } bool is_sort(int* str, int n)//判断数组是否是升序 { for (int i = 0; i < n - 1; i++) { if (str[i] > str[i + 1]) { return false; } } return true; } bool is_length(char** Str, int n) { //求出每个单词的长度,存入整型数组str_len中 int* str_len = (int*)malloc(sizeof(int) * n); assert(str_len); for (int i = 0; i < n; i++) { str_len[i] = strlen(Str[i]); } //判断str_len数组中的元素是否是按照从小到大的顺序排列的 return is_sort(str_len, n); } int main() { //接收数据 //接收n int n = 0; scanf("%d", &n); //接收n个字符串 char** Str = (char**)malloc(n * sizeof(char*)); //指针数组:指针(每个单词的字符串)==数组 assert(Str); for (int i = 0; i < n; i++) { char* tmp = (char*)malloc(sizeof(char) * 100); assert(tmp); Str[i] = tmp; } for (int i = 0; i < n; i++) { scanf("%s", Str[i]);//接收每一行的元素放进二维数组的每一行 } //验证存放顺序 //1.验证是否按照字典序存放 bool flag_dic = is_dic(Str, n); //2.验证是否按照长度排序存放 bool flag_len = is_length(Str, n); if (flag_dic && flag_len) { printf("both"); } else if (flag_dic) { printf("lexicographically"); } else if (flag_len) { printf("lengths"); } else { printf("none"); } return 0; }