teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

コードを修正

2020/07/22 12:43

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -31,6 +31,7 @@
31
31
  MeCab::Tagger* tagger = MeCab::createTagger("");
32
32
  result = tagger->parse(buffer);
33
33
  strcpy_s(buf, sizeof buf, result);
34
+ delete tagger;
34
35
  n = 0;
35
36
  words[n] = strtok(buf, "\t\n");
36
37
  while (n < 100 && words[n]) {
@@ -71,6 +72,7 @@
71
72
  istringstream iss(result);
72
73
  string word;
73
74
  while (iss >> word) cout << "[" << word << "]\n";
75
+ delete tagger;
74
76
  return 0;
75
77
  }
76
78
  ```
@@ -87,4 +89,8 @@
87
89
  [ナンバーワン]
88
90
  [だ]
89
91
  [。]
90
- ```
92
+ ```
93
+ **追記2**
94
+ MeCab::Tagger* tagger = MeCab::createTagger(""); で作った
95
+ MeCab::Tagger オブジェクトは、delete tagger; で解体しないと
96
+ メモリーリークするので、上の 2つのコードを修正しました。

1

mecab の -Owakati のコードを追加

2020/07/22 12:43

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -51,4 +51,40 @@
51
51
  DxLib_End(); // DXライブラリの使用終了
52
52
  return 0;
53
53
  }
54
+ ```
55
+ **追記**
56
+ MeCab には品詞を出さないオプションがあるではありませんか。
57
+ ```C++
58
+ #pragma warning(disable: 4996)
59
+ #pragma comment(lib, "libmecab.lib")
60
+ #include <mecab.h>
61
+ #include <iostream> // cout
62
+ #include <sstream> // istringstream
63
+ #include <string> // string
64
+ using namespace std;
65
+
66
+ int main() {
67
+ char buffer[] = "頑張れカカロット、貴様がナンバーワンだ。";
68
+ MeCab::Tagger* tagger = MeCab::createTagger("-Owakati");
69
+ const char* result = tagger->parse(buffer);
70
+ cout << "[" << result << "]\n" "----------\n";
71
+ istringstream iss(result);
72
+ string word;
73
+ while (iss >> word) cout << "[" << word << "]\n";
74
+ return 0;
75
+ }
76
+ ```
77
+ 実行結果
78
+ ```
79
+ [頑張れ カカロット 、 貴様 が ナンバーワン だ 。
80
+ ]
81
+ ----------
82
+ [頑張れ]
83
+ [カカロット]
84
+ [、]
85
+ [貴様]
86
+ [が]
87
+ [ナンバーワン]
88
+ [だ]
89
+ [。]
54
90
  ```