查找方法以查找较大字符串中的子字符串
Find method to find substring within a larger string
我真的需要程序的最后一部分的帮助。我需要在较大的字符串中找到一个字符串,如果找到,则返回子字符串的开始位置。从方向:
我请注意,字符串位置从 0 开始,以长度 -1 结束。如果未找到该字符串,将返回值 -1。
已经开始并编译了以下代码,我只想知道这是否真的正确。我不想太过分,但我需要专家的一些反馈。我这样做对吗?或者至少我正朝着正确的方向前进?
const int MyString::Find(const MyString& other)
{
int start(0);
int counter(0);
int end = other.Size;
int count(0);
int end1 = Size;
int nfound = -1;
char* temp;
temp = new char[other.Size];
if(other.String[0] != ' ' && other.String[0] != ' ')
{
if(other.String[count] == String[counter])
{
start = counter;
for(int i = count; i < end-1;i++)
{
for(int j = counter; j < end1 -1; j++)
{
temp[j] = String[j];
}
}
if(other == temp)
{
return start;
}
else
return nfound;
}
else{
while(other.String[count] != String[counter])
{
counter++;
if(other.String[count] == String[counter])
{
start = counter;
for(int i = count; i < end-1;i++)
{
for(int j = counter; j < end1 -1; j++)
{
temp[j] = String[j];
}
}
if(other == temp)
{
return start;
}
else
return nfound;
}
}
}
}
else
{
return nfound;
}
}
这一行没问题,尽管它需要一个相应的delete
语句:
temp = new char[data.Size];
但是,我怀疑这条线是否做到了您想要的:
temp = data.String;
假设Mystring::String
(更传统的命名为Mystring::string
,但让它过去)的类型为char *
,后一行不会将data.String
中的字符复制到缓冲区中temp
。 相反,它失去了缓冲区,之后temp
只是data.String
的同义词,并指向与 相同的内存。
在编写一段代码时,首先需要的是一个算法来实现,用自然语言来描述它,用笔和纸画出算法的进展,然后用笔和纸再次验证该算法。然后,一旦你认为你有一个解决方案,就编写代码并测试它。但实际上用编程语言编码应该是你做的最后一件事。
在较大字符串中查找子字符串的简单算法将首先在较大字符串中搜索搜索模式中的第一个字符,将该位置称为start
。找到后,从该锚点比较每个后续位置。如果它们不匹配,则从 start+1
开始搜索第一个位置的元素。如果比较成功,则您已完成。如果在任何时候到达原始字符串的末尾,则搜索将失败:
// pseudocode
start <- 0
while start <> str.size()
start <- find( str+start, pattern[0] )
if start == str.size()
break
if (compare_from( str+start, pattern ) == EQUAL)
return success(start)
if start == str.size()
return failure
现在你只需要把它翻译成C++,通常将复杂的子操作实现为函数是一个好主意,因为这样你就可以通过小口来处理复杂性,而不是试图一次吞下它。上面的每个操作都应该足够简单,实现起来,然后整个算法就会到位。
我假设这是家庭作业,所以我不会直接给你答案,但你目前的算法甚至没有接近正确。
若要在另一个字符串中查找子字符串,需要该字符串和子字符串的独立计数器。
- 使用正则表达式regex_search在字符串中查找字符串
- 按类型与字符串查找对象
- 使用C RTTI(内置)通过字符串查找功能指针
- 关于获取行和字符串查找函数的问题
- 字符串查找方法找不到第一字母
- C++ 字符串.查找()
- 遇到字符串::查找的问题
- 将一个数组作为子字符串查找到另一个数组中
- 字符串查找第一个非的 C++ 问题
- 如何将通配符与字符串::查找一起使用
- 字符串::查找问题 (C++)
- 性能标准::strstr vs. 标准::字符串::查找
- C++字符串::查找崩溃应用程序
- 使用字符串查找单词的正确方法是什么
- 如何在<string>没有 std::string 中介的情况下制作一个支持通过 C 字符串查找的集合?
- 使用C++根据行中的第一个字符串查找行(仅一个)
- Borland字符串::查找bug
- std::map如何通过字符串查找元素
- 字符串查找函数返回奇数
- 如何使用子字符串查找数字行的正确部分