UVA 1593: Alignment of Code(模拟 Grade D)

题意:

格式化代码。每个单词对齐,至少隔开一个空格。

思路:

模拟。求出每个单词最大长度,然后按行输出。

代码:

#include <cstdio>
#include <cstdlib>
#include <cstring>

char words[1200][190][90];
int maxLen[190];

char tmp[200];

typedef char * pchar;

int readStr(pchar &str, char *out) {
    int num = 0;
    int ret = sscanf(str, "%s%n", out, &num);
    //printf("str = %s
", str);
    str += num;
    return ret;
}

void myprint(char *str, int len) {
    int i = 0;
    for (i = 0; str[i]; i++) {
        putchar(str[i]);
    }
    for (; i < len; i++) {
        putchar(' ');
    }
}

int main() {
    char *p;
    int nowLine = 0;
    while (gets(tmp)) {
        p = tmp;
        int i = 0;
        while (readStr(p, words[nowLine][i]) != -1) {
            i++;
        }
        nowLine++;
    }

    for (int i = 0; i < nowLine; i++) {
        for (int j = 0; j < 185; j++) {
            if (strlen(words[i][j]) > maxLen[j]) {
                maxLen[j] = strlen(words[i][j]);
            }
        }
    }

    for (int i = 0; i < nowLine; i++) {
        for (int j = 0; j < 185; j++) {
            if (strlen(words[i][j]) != 0) {
                if (j != 0) printf(" ");
                if (strlen(words[i][j+1])) myprint(words[i][j], maxLen[j]);
                else printf("%s", words[i][j]);
            } else break;
        }
        printf("
");
    }

    return 0;
}
原文地址:https://www.cnblogs.com/shinecheng/p/4031958.html