c++ 엉터리 코드 문제 지적 부탁드립니다.
글쓴이: zmzm2260 / 작성시간: 금, 2019/11/22 - 2:57오후
이진 탐색 트리에 파일로부터 문자열을 받아서 넣는 워드 카운트를 만들고 있습니다. class로 구현하려고 하는데 c++에 대한 이해가 부족합니다. 그래도 손이 가는대로 짜봤는데 실행이 되질 않습니다. 뭐가 문제일까요..?
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <cstring> #define SIZE 500 using namespace std; typedef class Bst* Bst_t; class Bst { private: char* data; int freq; Bst_t lchild; Bst_t rchild; public: static void load_input(Bst_t *list) { char fname[40], line[SIZE], * token; const char *delim = " %.,-_'\"?!()[]:\t\n;"; int index = 0; FILE* fp; cout << ("입력파일 : "); cin >> fname; fp = fopen(fname, "r"); while (fgets(line, SIZE, fp) != NULL) { token = strtok(line, delim); while (token != NULL) { token = _strlwr(token); if (islower(token[0])) { index = token[0] - 'a'; insert_node(&list<ol> </ol> , token); } token = strtok(NULL, delim); } } } static void insert_node(Bst_t* A, char* data) { Bst_t temp = NULL, ptr = modified_search(*A, data); if (ptr || !(*A)) { temp = (Bst_t)malloc(sizeof(*temp)); temp->data = (char*)malloc(sizeof(char) * (strlen(data) + 1)); strcpy(temp->data, data); temp->lchild = temp->rchild = NULL; if (*A) { if (strcmp(data, ptr->data) < 0) ptr->lchild = temp; else ptr->rchild = temp; } else *A = temp; } } static Bst_t modified_search(Bst_t tree, char* data) { Bst_t ptr = NULL; while (tree) { ptr = tree; if (strcmp(data, tree->data) == 0) { //tree->freq++; return NULL; } if (strcmp(data, tree->data) < 0) tree = tree->lchild; else tree = tree->rchild; } return ptr; } static void inorder(Bst_t A) { if (A) { inorder(A->lchild); cout << "word : " << A->data << endl; inorder(A->rchild); } } }; int main() { Bst_t list[26]; for (int i = 0; i < 26; i++) list[i] = (Bst_t)malloc(sizeof(Bst)); Bst::load_input(list); for (int i = 0; i < 26; i++) { Bst::inorder(list[i]); puts(""); } }
Forums:
그냥 C로 작성하는 것을 추천드립니다.
C++등 객체지향프로그래밍의 가장 좋은 점이 객체를 사용하는 것이라고 생각합니다.
가급적 비슷해 보이는 함수라도 C++에서 많이 사용되는 객체 (malloc => new 등)를 사용해서 기초부터 연습하시거나, 또는 그냥 C를 사용하시는 것이 낫다고 생각합니다.
겉으로 보기에 class 형태와 cin, cout을 사용했으므로 C++ 프로그램이라고 생각하시겠지만, 제가 보기에는 C프로그램에 더 가깝다고 생각되어 글을 적었습니다.
만약 C++ 공부를 위한 질문이라면 일단 static은 모두 없애버리시고, 가급적 포인터 보다는 레퍼런스나 클래스 멤버함수를 사용하시는 것이 어떨까 생각합니다.
Quote:손이 가는대로 짜봤는데
이 부분이 문제입니다.
댓글 달기