C语言每日一题——第十天

第十天

随着对指针了解的深入,小明决定进一步尝试指针的使用。

他写出一个程序,用于判断给定数组内最长连续字母串的长度。

运行: main.exe a b c d e f e a

输出:

6

解释:a b c d e f为最长连续字母串,长度为6。

运行: main.exe e d c b a b c

输出:

5

解释:e d c b a为最长连续字母串,其长度为5。

输入

程序通过命令行参数输入获取参数,参数格式为数组内容 数组内容 ...,输入内容为任意小写字母,数量不会超过100。

输出

数组内最长连续字母串的长度。

关键

数组的指针


解析

第一个代码有点丑,可以看第二版,但是第二版我用了goto

#include <stdio.h>
#include <iso646.h>


int main(int cnt, char **argv) {
    int direction = 0, length = 1, max_length = 1, sub;
    for (int i = 1; i < cnt - 1; i++) {
        if (direction == 0) {
            sub = *argv[i + 1] - *argv[i];
            if (sub == 1 or sub == -1) {
                length += 1;
                direction = sub;
            }
        } else {
            if (*argv[i] + direction == *argv[i + 1]) {
                length += 1;
            } else {
                // 不连续了
                if (length > max_length) {
                    max_length = length;
                }
                length = 1;
                direction = 0;
                sub = *argv[i + 1] - *argv[i];
                if (sub == 1 or sub == -1) {
                    length += 1;
                    direction = sub;
                }
            }
        }
    }
    if (max_length < length) {
        printf("%d\n", length);
    } else {
        printf("%d\n", max_length);
    }
    return 0;
}
#include <stdio.h>
#include <iso646.h>


int main(int cnt, char **argv) {
    int direction = 0, length = 1, max_length = 1, sub;
    for (int i = 1; i < cnt - 1; i++) {
        if (direction == 0) {  // 当前不在连续状态
            direction_0:
            sub = *argv[i + 1] - *argv[i];
            if (sub == 1 or sub == -1) {
                length += 1;
                direction = sub;
            }
        } else if (*argv[i] + direction == *argv[i + 1]) {  // 在连续状态,判断是否仍然连续
            length += 1;
        } else {
            // 不连续了
            if (length > max_length) {  // 更新最大长度
                max_length = length;
            }
            length = 1;
            direction = 0;
            // 注意这里回到执行非连续状态代码
            goto direction_0;
        }
    }
    if (max_length < length) {
        printf("%d\n", length);
    } else {
        printf("%d\n", max_length);
    }
    return 0;
}
posted @ 2022-10-07 12:42  风吹云动  阅读(116)  评论(0编辑  收藏  举报