谁能告诉我我的c ++代码有什么问题吗?

问题描述 投票:-3回答:1

问题:给定文本txt [0..n-1]和模式pat [0..m-1],编写一个函数search(char pat [],char txt []),该函数会打印所有出现的pat []及其在txt []中的排列(或字谜)。您可以假设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; 
}
c++ string anagram
1个回答
0
投票

您尚未描述您所遇到的实际问题,因此我不会检查您的代码是否满足该问题。但是,至少有一个明显的缺陷。

A char是一个字节,可以保存0-255之间的数字。大写字母的范围为65-90(*),例如参见this page。因此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,但这又是另一回事。

© www.soinside.com 2019 - 2024. All rights reserved.