返回一行中相对数字比较集中最后的一个索引位置(downmoon)

本文介绍了一个算法,用于从给定的字符串中找到数字最密集处的索引位置。通过遍历字符串并跟踪最长连续数字序列及其位置来实现。

有人问起这个问题:
有字符串如下:

ds32Christchurch 2 b 1200 - Rosamond J.S3.
ston 2 a 916 - Sidney 34
5 a 408 - Thomas A. 12 Youkq k
3hitehaven 10 b 1317
要求返回一行中相对数字比较集中最后的一个索引
以上结果应为
1200 后面的第一个位置
916 后面的一个位置
408 后面的一个位置
1317 后面的一个位置

匆忙写下算法,留待改进:

基 本算法:先把字符串转成一个字符数组,然后循环,取三个变量maxLength,tempMax,maxIndexPosition,,当连续为数字 时,tempLength++,然后与maxLength比较,记下maxLength和maxIndexPosition,直到行结束。

代码:
/// <summary> /// 获取一行字符串中数字连续了大值的位置,如 /// static string str = @"ds32Christchurch 2 b 1200 - Rosamond J.S3. "; /// 中的位置为1200后,即29 /// <a title="邀月工作室" href="http://blog.youkuaiyun.com/downmoon/" mce_href="http://blog.youkuaiyun.com/downmoon/" >欢迎与邀月交流,net技术与软件架构</a>(邀月) 2009.9.18 3w@live.cn /// </summary> /// <param name="sOrg">原始字符串</param> /// <returns></returns> public static int GetPosition(string sOrg) { int result = -1; if (string.IsNullOrEmpty(sOrg)) { return result; } int maxlength = 0;//最大连续长度 int maxIndex = -1;//怪大连续值的索引位置 int index = -1;//临时索引 int temp = 0;//临时变量,用于和最大连续值的比较 foreach (char c in sOrg) { index++;//索引位置累加 if (Char.IsDigit(c)) { temp++; if (temp > maxlength) { maxlength = temp;//记录连续数字最大值 maxIndex = index + 1;//记录连续数字最大值的索引位置 result = maxIndex; } } else { temp = 0; } } return result; }

测试代码:

public static void Main(string[] args) { string str = @"ds32Christchurch 2 b 1200 - Rosamond J.S3. "; //string str = "ston 2 a 916 - Sidney 34 "; Console.WriteLine("该行中数字比较集中的位置是:" + GetPosition(str)); Console.ReadKey(); }
得出结果:29

代码说明:

注意,此处使用Char.IsDigit(c) 没有用 Char.IsNumber(c)

关于这两个方法的区别,请查看MSDN

这个可以做个简单测试 
public static void TestNumber() { for (int i = 0; i <= 0xffff; ++i) { char c = (char)i; if (Char.IsDigit(c) != Char.IsNumber(c)) { Console.WriteLine("Char value {0:x} IsDigit() = {1}, IsNumber() = {2}", i, Char.IsDigit(c), Char.IsNumber(c)); } } }

内容概要:本文介绍了一个基于MATLAB实现的无人机三维路径规划项目,采用蚁群算法(ACO)与多层感知机(MLP)相结合的混合模型(ACO-MLP)。该模型通过三维环境离散化建模,利用ACO进行全局路径搜索,并引入MLP对环境特征进行自适应学习与启发因子优化,实现路径的动态调整与多目标优化。项目解决了高维空间建模、动态障碍规避、局部最优陷阱、算法实时性及多目标权衡等关键技术难题,结合并行计算与参数自适应机制,提升了路径规划的智能性、安全性和工程适用性。文中提供了详细的模型架构、核心算法流程及MATLAB代码示例,涵盖空间建模、信息素更新、MLP训练与融合优化等关键步骤。; 适合人群:具备一定MATLAB编程基础,熟悉智能优化算法与神经网络的高校学生、科研人员及从事无人机路径规划相关工作的工程师;适合从事智能无人系统、自动驾驶、机器人导航等领域的研究人员; 使用场景及目标:①应用于复杂三维环境下的无人机路径规划,如城市物流、灾害救援、军事侦察等场景;②实现飞行安全、能耗优化、路径平滑与实时避障等多目标协同优化;③为智能无人系统的自主决策与环境适应能力提供算法支持; 阅读建议:此资源结合理论模型与MATLAB实践,建议读者在理解ACO与MLP基本原理的基础上,结合代码示例进行仿真调试,重点关注ACO-MLP融合机制、多目标优化函数设计及参数自适应策略的实现,以深入掌握混合智能算法在工程中的应用方法。
【51系列微控制器简介】 51系列微控制器属于嵌入式控制单元,源自Intel公司早期开发的8051架构,因其集成度高、成本低廉且易于上手,在各类电子装置中普遍采用。该芯片内部通常包含中央处理器、随机存取存储器、只读存储器、定时计数单元以及多组并行输入输出接口,能够自主执行数据运算与设备调控功能。 【心形彩灯动态显示方案】 利用51系列微控制器实现的心形彩灯动态显示方案,是将微电子控制技术与视觉光效设计相融合的典型实践。该方案通过微控制器对发光二极管的发光强度及闪烁时序进行精确调度,从而呈现连续变化的多彩心形光影图案。其实施过程主要涵盖以下技术环节: 1. **外围电路连接**:心形灯阵中的各色发光二极管需经由适配的驱动电路与微控制器的通用输入输出引脚相连,每个发光单元可独立对应一个或多个引脚以实现分路调控。 2. **色彩合成与信号输出**:全彩发光二极管多采用红绿蓝三原色混光原理,通过调整各基色通道的占空比可合成丰富色调。微控制器需分别调控各通道的脉冲宽度调制信号以生成目标色彩。 3. **控制代码开发**:采用C语言等嵌入式编程语言编写控制指令集,例如运用定时中断机制设定闪烁周期,结合循环结构与逻辑判断实现动态模式切换。 4. **光效序列算法**:动态光效如渐变流水、明暗呼吸、光谱循环等需通过特定算法实现,需根据实际显示需求对时序参数进行数学建模与优化。 5. **代码转化与写入**:完成源代码编写后,使用专用编译工具生成机器可识别的十六进制文件,再通过在线编程接口将代码固化至微控制器的程序存储器。 6. **系统验证与调整**:在实体硬件上运行程序并观测实际光效,根据显示效果对电路参数或程序逻辑进行迭代修正,确保光效符合设计规范。 7. **供电方案设计**:为保障长期稳定运行,需设计合理的电源稳压与滤波电路,控制整体功耗并避免电压波动对器件造成影响。 8. **可靠性保障措施**:设计阶段需考虑电气隔离、散热结构等安全要素,防止过压、过热等异常情况导致系统故障。 综上所述,该心形彩灯演示方案是一项融合硬件电路构建、嵌入式软件开发、控制算法设计及系统调试的综合实践项目,对于深入理解微控制器工作原理、提升工程实现能力具有显著促进作用。通过完整实施此类项目,既可巩固微控制器基础应用技能,亦能培养系统性解决复杂技术问题的创新能力。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值