当前位置: 首页 > news >正文

Symbian下stl::String类中Find算法的实现

因为Symbian中不支持STL,而为了减少移植的成本,最近在尝试写一些常用的STL类库。在写到String类的Find算法实现时,犯了一个小错误,记录一下。

原始的实现版本为:

int MyString::Find(char* find)
{
return Find(m_cszData,find);
}


int MyString::Find(char *source,char *find)
{
int lensource = len(source);
int lenfind = len(find);
int tmp = 0;

for(int i = lensource - lenfind ; i > 0; i--)
{
tmp = i;
for (int j = 0 ; j < lenfind ; j++ )
{
char soureTemp = *(source + i);
char desTemp = *(find + j);

if (soureTemp == desTemp)
{
if (j == lenfind - 1 ) //判断结束
{
return tmp;
}

i++; //判断find的下一个字符
continue;
}
else
{
break;
}
}
}
return -1;
}

这个算法的主要错误在于黄色标识的部分,因为如果第一个字符匹配会改变i的值,使其值++。如果第二个字符不再匹配,那么算法会跳出第二个for循环。又使i的值--,所以造成一个"无限次比较"!

修改之后的算法为:

int MyString::Find(char* find)
{
return Find(m_cszData,find);
}


int MyString::Find(char *source,char *find)
{
int lensource = len(source);
int lenfind = len(find);
int tmp = 0;
int temp = 0;

for(int i = lensource - lenfind ; i > 0; i--)
{
tmp = i;
temp = i;
for (int j = 0 ; j < lenfind ; j++ )
{
char soureTemp = *(source + temp);
char desTemp = *(find + j);

if (soureTemp == desTemp)
{
if (j == lenfind - 1 ) //判断结束
{
return tmp;
}

temp++; //判断find的下一个字符
continue;
}
else
{
break;
}
}
}
return -1;
}

相关文章:

  • 关于软件设计的一点思考
  • 使用DataGrid中扩展ItemRenderer和HeaderRenderer进行操作
  • 关于软件架构的一点思考
  • 在推广单元测试过程中发现的雷人问题
  • JAVA开发环境配置---JDK的安装与配置
  • Java与C#的垃圾回收机制
  • 在UltraWebGrid单元格中绑定WebNumericEdit或其它可编辑控件
  • 正确编写概要设计...
  • HTML5 本地存储DEMO ---localStorage
  • 倘不能独善其身,何谈兼济天下——外企是?
  • 下载和安装jadclipse
  • java中使用protobuf序列化(反序列化)
  • 《软件开发的边界-管理成功的项目》
  • 二叉排序树与二叉堆
  • 再谈外企是——回复一位网友
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • Python语法速览与机器学习开发环境搭建
  • Spring Boot快速入门(一):Hello Spring Boot
  • spring-boot List转Page
  • Yii源码解读-服务定位器(Service Locator)
  • 闭包,sync使用细节
  • 工程优化暨babel升级小记
  • 回顾2016
  • 面试遇到的一些题
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • #etcd#安装时出错
  • #Linux(make工具和makefile文件以及makefile语法)
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • #考研#计算机文化知识1(局域网及网络互联)
  • (1)(1.9) MSP (version 4.2)
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (七)c52学习之旅-中断
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转)程序员疫苗:代码注入
  • .axf 转化 .bin文件 的方法
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • @31省区市高考时间表来了,祝考试成功
  • [202209]mysql8.0 双主集群搭建 亲测可用
  • [AUTOSAR][诊断管理][ECU][$37] 请求退出传输。终止数据传输的(上传/下载)
  • [CSS]文字旁边的竖线以及布局知识
  • [Docker]五.Docker中Dockerfile详解
  • [PAT练级笔记] 44 Basic Level 1044 火星数字
  • [Qualcomm][Power]QCM2290功耗异常问题
  • [Spring Boot 3] 整合NoSQL与构建RESTful服务
  • [Vulnhub]靶场 Web Machine(N7)
  • [Web开发] IE 所有版本打包下载,网页兼容测试必备
  • [笔记].关于使用fscanf无法录入正确数据的原因分析
  • [程序设计语言]-01:引言
  • [答疑]微信餐馆案例中,“启动二维码对应的程序”这个用例合理吗
  • [翻译] TLMotionEffect 重力感应