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;
}