老实说,有点不想写这篇解题报告。其一,参考了别人的代码;其二,思路很混乱。
题意:给定若干字符串,按照最大的字符串长度按规格输出(表述很烦,在代码中模拟)。
思路:
排序 + 模拟
学习点:
1、c语言中qsort对字符串的排序;
2、c语言中,输出按左对齐,不足补空格 (printf("%-*s",n, str), “-”靠左,”*“若干位, “n”位数);
3、读题能力。
源代码:
#include <iostream> #include <algorithm> #include <string> #include <cstring> #include <cstdio> #include <cstdlib> using namespace std; const int MAXN = 101; int nNum; char nName[MAXN][MAXN]; int cmp(const void *a, const void *b); int main() { int i, j; int max_len; int row, col; while (cin >> nNum) { //这个很重要,至今不理解! for (i = nNum; i < MAXN; i ++) nName[i][0] = '/0'; // max_len = -1; for (i = 0; i < nNum; i ++) { scanf("%s", nName[i]); int tmp = strlen(nName[i]); if (tmp > max_len) max_len = tmp; } col = 62 / (max_len + 2); if (nNum % col) row = nNum / col + 1; else row = nNum / col; qsort(nName, nNum, sizeof(nName[0]), cmp); printf("------------------------------------------------------------/n"); for (i = 0; i < row; i ++) { for (j = 0; j < col; j ++) { printf("%-*s", max_len + 2, nName[i + j * row]); } printf("/n"); } } return 0; } int cmp(const void *a, const void *b) { return strcmp((char *)a, (char *)b); }