私はサフィックストライのC++コードを書こうとしていますが、このコードでは、接尾辞トライの構築中に文字や部分文字列がどのくらいの頻度で出現するかを各ノードのカウンタに記録しておきます。唯一の4文字A、C、GおよびT接尾辞トライC++
以下のコードで働いていることがそのが正しく動作していない私の試みです:
#include<iostream>
#include <string>
#include <stdio.h>
#include <string.h>
using namespace std;
struct SuffixTreeNode{
char c;
struct SuffixTreeNode* one;
struct SuffixTreeNode* two;
struct SuffixTreeNode* three;
struct SuffixTreeNode* four;
//int count;
};
SuffixTreeNode* CreateNode(char ch){
SuffixTreeNode* newnode=new SuffixTreeNode();
newnode->c=ch;
newnode->one=NULL;
newnode->two=NULL;
newnode->three=NULL;
newnode->four=NULL;
//count=0;
}
SuffixTreeNode* Insert(SuffixTreeNode* root,char ch){
if (root==NULL){
root=CreateNode(ch);
}
else if(ch=='a'){
root->one=Insert(root->one,ch);
}
else if(ch=='c'){
root->two=Insert(root->two,ch);
}
else if(ch=='g'){
root->three=Insert(root->three,ch);
}
else if(ch=='t') {
root->four=Insert(root->four,ch);
}
return root;
}
bool Search(SuffixTreeNode* root, int data){
if(root==NULL) return false;
else if (root->c==data) return true;
else if (root->c=='a')return Search(root->one,data);
else if (root->c=='c')return Search(root->two,data);
else if (root->c=='g')return Search(root->three,data);
else return Search(root->four,data);
}
int main(){
SuffixTreeNode* root=NULL;
char str;
root=Insert(root,'a');
root=Insert(root,'c');
root=Insert(root,'c');
root=Insert(root,'t');
root=Insert(root,'a');
root=Insert(root,'g');
cout<<"Enter character to be searched\n";
cin>>str;
if(Search(root,str)==true)cout<<"Found\n";
else cout<<"Not found\n";
}
Cタグがちょうど差し込まれました。無関係な、**異なる**言語のタグを追加しないでください。 – Olaf
真に 'C++'タグを削除するべきです。これはC++ではありません...なぜヘッダーのcとC++バージョンを含めるのですか?また、本当にCやC++が欲しいですか?オブジェクトを使うことを頼みます。より一般的な注記にも。あなたは質問がありません。デバッグの助けを求める質問(「なぜこのコードは動作しないのですか?」)には、必要な動作、具体的な動作が含まれていなければなりません問題やエラー、その問題自体の中でそれを再現するのに必要な最短のコード。* "だから、他の人があなたを助けるのを助けてください。 – luk32
@ luk32正直なところ、 '' ''と 'cout'それは確かにCではありません –
Christophe