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;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)