任何人都可以告诉我我的 C++ 代码出了什么问题?
can anyone please tell me what's wrong with my c++ code?
问题:给定文本 txt[0..n-1] 和一个模式 pat[0..m-1],编写一个函数搜索(char pat[], char txt[](,在 txt[] 中打印所有出现的 pat[] 及其排列(或字谜(。你可以假设 n> m。
#include<iostream>
#include<cstring>
#define MAX 256
using namespace std;
void search(char *pat, char *txt)
{
int M = strlen(pat), N = strlen(txt);
int i,count=0,start=0 ;
int hashpat[26]={0},hashtxt[26]={0};
for(i=0;i<M;i++)
{
hashpat[pat[i]]++;
}
for(i=0;i<N;i++)
{
hashtxt[txt[i]]++;
if(hashtxt[txt[i]]<=hashpat[txt[i]])
count++;
if(count==M)
{ cout<<"Found at index"<<i-M<<"n";
hashtxt[txt[start]]--;
if(hashpat[txt[start]]!=0) count--;
start++;
}
}
}
/* Driver program to test above function */
int main()
{
char txt[] = "BACDGABCDA";
char pat[] = "ABCD";
search(pat, txt);
return 0;
}
你还没有描述你遇到的实际问题,我也不会通过并检查你的代码是否满足问题。但是,至少有一个明显的缺陷。
char
是单个字节,可以容纳 0-255 之间的数字。大写字母占据范围 65-90 (*(,例如请参阅此页面。所以pat
实际上看起来像这样:{65, 66, 67, 68}
.
您正在尝试使用这些数字输入hashpat
,这些数字远远大于数组的长度。您需要将它们分配为大小 256,方便地您已经将其定义为。
int hashpat[MAX]={0};
int hashtxt[MAX]={0};
其他一些随机建议:
- 鉴于您正在传入
char*
,您可能应该将这些char
数组。 search
的参数和main
中的变量都应该是const char*
的,因为这是字符串文字的类型- 鉴于您使用的是C++,您应该考虑使用
vector
和string
而不是数组和字符,这通常会让事情变得更容易一些。
(*( 假设我们在 ASCII/UTF-8 中,但那是另一壶鱼。
相关文章:
- 警告处理为错误这里有什么问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 当我尝试添加 2 个大字符串时,我无法弄清楚出了什么问题
- 违反const正确性:我应该现实地期待什么问题
- 这个带有模板<类 Vector 的C++代码片段有什么问题>
- 我的逻辑反转字符串中的元音有什么问题?
- 需要以下代码的帮助,下面的代码有什么问题
- 常量公共成员有什么问题?
- 以下代码中的函数模板有什么问题?
- 这个返回元素位置的基于循环的函数有什么问题?
- creat_list2功能有什么问题?
- 格式说明符C++有什么问题
- 任何人都可以告诉我我的 C++ 代码出了什么问题?
- 从 argv[1] 转换为字符 * 字符串后有什么问题?
- 我的堆栈和库存清单程序的结构有什么问题?
- 此工厂功能有什么问题?
- 以下 C++ 代码有什么问题?
- 数组为此合并排序函数提供了正确的输出,但向量给出了不正确的输出.出了什么问题?
- reinterpret_cast,只读访问,简单的可复制类型,会出什么问题?
- 它解决了什么问题,对于非真空初始化,生命周期在初始化之前就开始了