任何人都可以告诉我我的 C++ 代码出了什么问题?

can anyone please tell me what's wrong with my c++ code?

本文关键字:什么 问题 代码 都可以 告诉我 我的 C++ 任何人      更新时间:2023-10-16

问题:给定文本 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++,您应该考虑使用vectorstring而不是数组和字符,这通常会让事情变得更容易一些。

(*( 假设我们在 ASCII/UTF-8 中,但那是另一壶鱼。