解题思路:
1、本题从题干 上很直接可以得出其实是一个 排序问题,关键是在于 数字的比较 大家很好理解, 但是字符串的比较让人无从下手
2、strcmp(char* str1, char* str2) 函数在具体执行时,会按个比较字符的Assil 码,如果相同则返回0, 不同则返回 Assil 的差值,例如
str1[10] - str2[10] 是‘a' -'b' 则差值为-1.
备注: 其实这个函数我 也是看了 其他同学的分享 才想起起来相关的用法。
经验教训: 对于c 库函数不仅要知其然, 还要知其所以然。 我们用轮子的同时,第一步就是要明确这个轮子 到底能干些啥?
#include <stdio.h>
#include <string.h>
int main(void) {
char str[1000][101] = {0};
unsigned nums = 0;
scanf("%d", &nums);
for (unsigned int i= 0; i < nums; i++) {
scanf("%s", str[i]);
}
for (unsigned int i = 0; i< nums -1; i++) {
char temp[101] = {0};
unsigned int flag = 0;
for (unsigned int j = 0; j < nums -1 -i; j++) {
if (strcmp(str[j], str[j+1]) > 0) {
strcpy(temp, str[j]);
strcpy(str[j], str[j+1]);
strcpy(str[j+1], temp);
flag = 1;
}
}
if (flag == 0) {
break;
}
}
for (unsigned int i = 0; i < nums; i++) {
printf("%s\n", str[i]);
}
return 0;
}
#include <string.h>
int main(void) {
char str[1000][101] = {0};
unsigned nums = 0;
scanf("%d", &nums);
for (unsigned int i= 0; i < nums; i++) {
scanf("%s", str[i]);
}
for (unsigned int i = 0; i< nums -1; i++) {
char temp[101] = {0};
unsigned int flag = 0;
for (unsigned int j = 0; j < nums -1 -i; j++) {
if (strcmp(str[j], str[j+1]) > 0) {
strcpy(temp, str[j]);
strcpy(str[j], str[j+1]);
strcpy(str[j+1], temp);
flag = 1;
}
}
if (flag == 0) {
break;
}
}
for (unsigned int i = 0; i < nums; i++) {
printf("%s\n", str[i]);
}
return 0;
}