C++ 在给定字符串中查找子字符串
这是我的程序,用于查找人名中是否存在子字符串。搜索函数的实现在我看来似乎是正确的,但当我在代码块中运行它时,它仍然不起作用。没有编译错误,但在运行时无法正常工作C++ 在给定字符串中查找子字符串,c++,C++,这是我的程序,用于查找人名中是否存在子字符串。搜索函数的实现在我看来似乎是正确的,但当我在代码块中运行它时,它仍然不起作用。没有编译错误,但在运行时无法正常工作 #包括 #包括 #包括 使用名称空间std; 班主任 { 字符*名称; 公众: 个人(字符*n) { name=n; } 布尔搜索(字符*子字符) { char*str=名称; 而(*str!='\0') {int count=0; 如果(*str==*substr) {char*s=substr; char*p=str; 而(*s!
#包括
#包括
#包括
使用名称空间std;
班主任
{
字符*名称;
公众:
个人(字符*n)
{
name=n;
}
布尔搜索(字符*子字符)
{
char*str=名称;
而(*str!='\0')
{int count=0;
如果(*str==*substr)
{char*s=substr;
char*p=str;
而(*s!='\0')
{
如果(*p==*s)
{
计数++;
p++;
s++;
}
其他的
打破
}
}
如果(计数==strlen(substr))
{
cout对我这边的代码做了一些修改。
使用const char name;如在Person p(“Akhil”);从“const char”到“char*”的转换无效
#include<iostream>
#include<stdio.h>
#include<string.h>
class Person
{
const char *name;
public:
Person(const char* n)
{
name=n;
}
bool search(char* substr)
{
const char *str=name;
while(*str!='\0')
{ int count=0;
if(*str==*substr)
{ char *s=substr;
const char *p=str;
while(*s!='\0')
{
if(*p==*s)
{
count++;
p++;
s++;
}
else
break;
}
}
if(count==strlen(substr))
{
cout<<name<<endl;
return true;
}
str++;
}
return false;
}
void print()
{
cout<<name<<endl;
}
};
int main()
{
Person p("Akhil");
char* s;
cout<<"Enter substring to be found:"<<endl;
gets(s);
if(p.search(s))
cout<<"Found!!!\n";
else
cout<<"Not Found!!!\n";
}
使用的软件:Dev-C++5.4.2
使用的编译器:编译器:TDM-GCC 4.7.1 64位版本您必须向while循环内部添加另一个条件
while(*s != '\0' && *p != '\0')
{
if(*p == *s)
{
count++;
p++;
s++;
}
else
break;
}
原因是您可以在到达s
的结尾之前到达p
的结尾。例如,如果字符串是Akhil
,并且要找到的子字符串是ill
Wild guess:问题在于如何读取字符串。gets()
自c++11起被弃用,并从c++14起被删除。您应该使用std::cin
(因为您允许对输出使用std::cout
,所以也应该允许这样做):
问题可能是,gets
将从控制台读取输入并将其放入您提供的缓冲区中。但由于您没有初始化缓冲区s
,因此会出现未定义的行为
此外,您应该将char*
替换为const char*
,因为您不打算修改任何字符串
还要避免使用命名空间std
为什么不使用if(s1.find(s2)!=std::string::npos){std::cout在我的作业中,提到自己实现搜索函数而不使用任何标准的库函数。问家庭作业问题是可以的,但是你必须提到你需要自己实现,而不是使用库函数。对不起,我是这里的新手。我将从下一个tim开始处理这个问题e、 您也可以编辑您的问题以立即添加它;)不相关,但您应该查看一下您使用命名空间std删除了,但仍然编写cout
,而不是std::cout
,因此它甚至不编译。此外,您使用的是过时的get
,带有未初始化的缓冲区s
->未定义的行为不,但在这种情况下,当*p!=*s.Ah正确时,循环将自动中断,它适用于C样式的字符串,但不适用于类字符串的迭代器。
Enter substring to be found:
kh
Akhil
Found!!!
--------------------------------
Process exited with return value 0
Press any key to continue . . .
while(*s != '\0' && *p != '\0')
{
if(*p == *s)
{
count++;
p++;
s++;
}
else
break;
}
std::string s;
std::cin >> s;
if(p.search(s.c_str()))
...