描述
给定 n 个字符串,请对 n 个字符串按照字典序排列。
数据范围: 1 \le n \le 1000 \1≤n≤1000 ,字符串长度满足 1 \le len \le 100 \1≤len≤100
输入描述:
输入第一行为一个正整数n(1≤n≤1000),下面n行为n个字符串(字符串长度≤100),字符串中只含有大小写字母。
输出描述:
数据输出n行,输出结果为按照字典序排列的字符串。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 101
int mystrlen(char *str) //计算字符串长度
{
if (str == NULL)
{
return -1;
}
int length = 0;
while (*str++ != '\0')
{
length++;
}
return length;
}
int mystrcmp(const char *str1, const char *str2) //比较字符串大小,大于返回正数,小于负数,相等为0
{
char *p1 = (char *)str1;
char *p2 = (char *)str2;
if (str1 == NULL || str2 == NULL)
{
return -1;
}
while (*str1 == *str2)
{
if (*str1 == '\0')
{
return 0; //相等返回0
}
str1++;
str2++;
}
return (*str1 - *str2);
}
void strSort(char **str, int len) //排序字符串数组
{
int i = 0;
int j = 0;
char *temp = NULL;
temp = (char *)malloc(10 * sizeof(char));
char *p = temp;
for (i = 0; i < len - 1; i++) //冒泡排序
{
for (j = 0; j < len - i - 1; j++)
{
if (mystrcmp(str[j], str[j + 1]) > 0) //比较字符串大小按照ASCII比较
{
p = str[j];
str[j] = str[j + 1];
str[j + 1] = p;
}
}
}
free(temp);
temp = NULL;
}
int main()
{
int num = 0;
scanf("%d", &num);
//必须初始化二维数组
char **str = (char **)malloc(sizeof(char *) * num); //指向二维数组,一维数组指针的二级指针
char *p = (char *)malloc(sizeof(char) * SIZE * num); //为二维数组的每个元素分配空间
memset(p, sizeof(char) * SIZE * num, 0);
for (int i = 0; i < num; i++)
{
scanf("%s", p + i * SIZE);
str[i] = p + i * SIZE; // str[i] 是二维数组的一维数组指针 str[i] = *(str + i)
}
strSort(str, num);
for (int i = 0; i < num; i++)
{ // 注意 while 处理多个 case
// 64 位输出请用 printf("%lld")
printf("%s\n", str[i]);
}
system("pause");
return 0;
}