n个字符串按ASCII排序(n< 10),每个子串不超过20个字符
我用的是二维数组,每行表示一个子串,但是不能对第一个子串赋值,第二个可以
下面是我的代码,是哪里错了呢
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int cmp(char *str1, char *str2); //字符串比较
void swap(char *element1, char *element2); //字符串交换
int main()
{
int num, i, m, n;
char strs[9][21];
scanf_s("%d", &num); //输入字符串个数
for (i = 0; i < num; i++)
{
gets(strs[i]); //依次输入字符串
}
for (i = 0; i < num; i++) //从第一个子串开始遍历
{
for (m = 0; m < strlen(i) - 1; m++) //冒泡排序
for (n = 0; n < strlen(i) - 1 - m; n++)
{
if (cmp(strs[n], strs[n + 1])) //字符串比较
{
swap(strs[m], strs[m + 1]); //字符串交换
break; //跳出第一层循环
}
}
}
for (i = 0; i < n; i++)
printf("%s\n", strs[i]); //依次打印出每个子串
system("pause");
return 0;
}
int cmp(char *str1, char *str2)
{
int i;
for (i = 0; i < strlen(str1) || i < strlen(str2); i++)
{
if (str1[i] < str2[i])
return 1;
else if (str1[i] > str2[i])
return 0;
}
}
void swap(char *element1, char *element2)
{
char tmp[21];
tmp[21] = element1;
element1 = element2;
element2 = tmp[21];
}