`
totoxian
  • 浏览: 1073939 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

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

分享到:
评论

相关推荐

    C++ STL std::string详细讲解

    在C++编程语言中,STL(Standard Template Library,标准模板库)是极其重要的组成部分,它提供了一系列高效、可重用的数据结构和算法。其中,`std::string`类是处理字符串的重要工具,它提供了丰富的功能,使得字符...

    std::string format格式化函数源代码及两种格式化方法

    1. **使用`std::stringstream`**:这是C++标准库提供的一个流类,可以像操作文件流一样操作内存中的字符串。通过`运算符,可以将各种类型的值插入到流中,最后调用`str()`成员函数获取格式化后的字符串。 2. **利用...

    STL中的string介绍

    ### STL中的string介绍 在标准模板库(STL)中,`string`是处理文本数据的一个强大工具。它实质上是对C风格字符串的一种封装,提供了更安全、更方便的字符串操作方式。`string`类定义在`&lt;string&gt;`头文件中,它是`...

    以STL::map实现引用表

    以STL::map实现引用表,如有错误,欢迎指教!

    stl::string与CString类似函数

    关于string的几个类似CString的函数

    C++实现string存取二进制数据的方法

    在C++编程中,STL(Standard Template Library)的string类是用于处理文本字符串的强大工具。然而,在处理二进制数据时,需要注意string类的一些特性,因为它通常与文本字符串关联,而二进制数据可能包含特殊的字符...

    string类的构造方法_String类重要吗_C++_STL_string_

    在C++标准模板库(STL)中,`std::string`类是一个极其重要的容器,它专门用于存储、操作和管理字符串数据。标题中的“string类的构造方法”揭示了我们要探讨的核心内容——如何初始化和创建`std::string`对象。`std...

    stl string常用函数

    STL String 类常用函数 STL String 类是一个基本的字符串类,提供了多种构造函数、字符操作、输入输出操作、赋值操作、连接操作和比较操作等功能。 构造函数 STL String 类提供了多种构造函数,可以根据不同的...

    C++ STL string常用函数

    在C++标准模板库(STL)中,`string`类提供了丰富的字符串处理功能,极大地简化了字符串操作的复杂性。本文将详细介绍`string`类中的常用成员函数,包括构造与赋值、查询、修改、比较以及额外的辅助函数。 #### 构造...

    STL string详解

    STL(Standard Template Library,标准模板库)是C++编程语言中的一个重要组成部分,它提供了一系列高效、可重用的数据结构和算法。其中,`std::string`是STL中的一个核心组件,它是用来处理字符串的强大工具。这篇...

    STL实现的数据结构部分算法

    在`4_2.cpp`中,展示了如何使用STL中的`string`类来进行字符串的连接操作。`string`类提供了多种方法来操作字符串,如`append`方法可以将一个字符串附加到另一个字符串的末尾,非常直观且高效。 - **代码解析**: ...

    第4章C++标准库STLstring类.ppt

    C++标准库STLstring类是C++标准库中的一个基本组件,提供了字符串处理的基本操作。下面是该类的详细知识点: 一、string类的基本概念 * string类是一个模板类basic_string的别名,定义在&lt;string&gt;头文件中。 * ...

    STL所有算法介绍

    find`、`binary_search`、`count`、`count_if`、`equal_range`、`find`、`find_end`、`find_first_of`、`find_if`、`lower_bound`、`upper_bound`、`search`、`search_n`等,这些算法帮助开发者在容器中快速定位特定...

    STL_string_class_src.zip_CString_STL_string

    标题提到的"STL_string_class_src.zip_CString_STL_string"可能是一个项目或代码示例,其目标是实现一个类似于MFC(Microsoft Foundation Classes)中的`CStringT`类,但使用了STL的`std::string`。`CStringT`在...

    string类中英文文档

    在C++编程语言中,`std::string`类是一个非常重要的数据类型,它用于表示和操作文本字符串。这个类在标准库中定义,是C++ Standard Template Library (STL)的一部分,提供了丰富的成员函数和操作符来处理字符串。在...

    C++ STL--数据结构与算法实现(余文溪)示例程序代码.rar

    C++ STL,全称为Standard Template Library(标准模板库),是C++编程语言中的一部分,它提供了丰富的容器、迭代器、算法和函数对象等组件,极大地简化了数据结构和算法的实现。余文溪的《C++ STL--数据结构与算法...

    第4章-C++-标准库STL-string类.ppt

    C++标准库STL中的String类 C++标准库STL中的String类是C++标准模板库(STL)中的一个重要组件,提供了字符串基本操作。该类定义在&lt;string&gt;头文件中,并提供了许多有用的成员函数和属性来操作字符串。 String类的...

    C标准库STLstring类PPT学习教案.pptx

    《C++标准库STLstring类详解》 在C++编程语言中,STL(Standard Template Library,标准模板库)是不可或缺的一部分,它提供了一系列高效且功能强大的数据结构和算法。其中,`std::string`类是处理字符串的重要工具...

Global site tag (gtag.js) - Google Analytics