题解 | #字符串排序#
字符串排序
http://www.nowcoder.com/practice/5af18ba2eb45443aa91a11e848aa6723
不用库函数的暴力解法
主要采用了冒泡排序,分了三种情况对字符串进行处理
#include<string.h>
struct str {
char ch[101];
};
int main() {
struct str n[1001];
struct str temp;
int count, len, k;
while ((scanf("%d", &len)) != EOF){
count = len;
while (count--) {
scanf("%s", n[count].ch);
}
}
for (int i = 0; i < len - 1; i++) {
for (int j = 0; j < len - i - 1; j++) {
if (strlen(n[j].ch) > strlen(n[j + 1].ch)) {
for (k = 0; k < strlen(n[j + 1].ch); k++) {
if (n[j].ch[k] > n[j + 1].ch[k]) {
temp = n[j];
n[j] = n[j + 1];
n[j + 1] = temp;
break;
}
if (n[j].ch[k] < n[j + 1].ch[k])
break;
}
if (k == strlen(n[j + 1].ch)) {
temp = n[j];
n[j] = n[j + 1];
n[j + 1] = temp;
}
}
if (strlen(n[j].ch) == strlen(n[j + 1].ch)) {
for (k = 0; k < strlen(n[j + 1].ch); k++) {
if (n[j].ch[k] > n[j + 1].ch[k]) {
temp = n[j];
n[j] = n[j + 1];
n[j + 1] = temp;
break;
}
if (n[j].ch[k] < n[j + 1].ch[k])
break;
}
}
if (strlen(n[j].ch) < strlen(n[j + 1].ch)) {
for (k = 0; k < strlen(n[j].ch); k++) {
if (n[j].ch[k] > n[j + 1].ch[k]) {
temp = n[j];
n[j] = n[j + 1];
n[j + 1] = temp;
break;
}
if (n[j].ch[k] < n[j + 1].ch[k])
break;
}
}
}
}
for(int l = 0;l < len;l++){
printf("%s\n",n[l].ch);
}
return 0;
}