合計 昨日 今日

naohiro19
 
記事: 247
登録日時: 2010年10月16日(土) 20:16
お住まい: 愛知県
日記: 日記を見る (121)
日記
- 2月 2018
+ 1月 2018
+ 12月 2017
+ 11月 2017
+ 10月 2017
+ 8月 2017
+ 7月 2017
+ 6月 2017
+ 5月 2017
+ 1月 2017
+ 9月 2016
+ 8月 2016
+ 7月 2016
+ 6月 2016
+ 5月 2016
+ 4月 2016
+ 9月 2015
+ 8月 2015
+ 7月 2015
+ 6月 2015
+ 11月 2014
+ 10月 2014
+ 8月 2014
+ 7月 2014
+ 6月 2014
+ 5月 2014
+ 4月 2014
+ 3月 2014
+ 12月 2013
+ 10月 2013
+ 9月 2013
+ 7月 2013
+ 6月 2013
+ 5月 2013
+ 10月 2012
+ 8月 2012
+ 7月 2012
+ 6月 2012
+ 5月 2012
+ 11月 2011
カテゴリー
講座
7 記事
勉強
4 記事
プログラミング
35 記事
フィード
次へ

[C++]ファイナルファンタジー10のアルベド語を日本語に翻訳するプログラム

パーマリンクby naohiro19 on 2018年2月13日(火) 23:59 カテゴリー: プログラミング

PS2用ゲームソフト「ファイナルファンタジー10」に登場する"アルベド語"を日本語にする変換プログラムを作ってみました。
以下ソース
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#pragma once
 
#include <string>
#include <regex>
 
namespace ff10 {
    inline
    std::wstring FromAlbedToJapanese(std::wstring src)
    {
        src = std::regex_replace(src, std::wregex(L"ア"), L"か");
        src = std::regex_replace(src, std::wregex(L"イ"), L"み");
        src = std::regex_replace(src, std::wregex(L"ウ"), L"る");
        src = std::regex_replace(src, std::wregex(L"エ"), L"れ");
        src = std::regex_replace(src, std::wregex(L"オ"), L"の");
        src = std::regex_replace(src, std::wregex(L"カ"), L"わ");
        src = std::regex_replace(src, std::wregex(L"キ"), L"し");
        src = std::regex_replace(src, std::wregex(L"ク"), L"ふ");
        src = std::regex_replace(src, std::wregex(L"ケ"), L"へ");
        src = std::regex_replace(src, std::wregex(L"コ"), L"も");
        src = std::regex_replace(src, std::wregex(L"サ"), L"た");
        src = std::regex_replace(src, std::wregex(L"シ"), L"に");
        src = std::regex_replace(src, std::wregex(L"ス"), L"ぬ");
        src = std::regex_replace(src, std::wregex(L"セ"), L"て");
        src = std::regex_replace(src, std::wregex(L"ソ"), L"と");
        src = std::regex_replace(src, std::wregex(L"タ"), L"や");
        src = std::regex_replace(src, std::wregex(L"チ"), L"き");
        src = std::regex_replace(src, std::wregex(L"ツ"), L"む");
        src = std::regex_replace(src, std::wregex(L"テ"), L"け");
        src = std::regex_replace(src, std::wregex(L"ト"), L"お");
        src = std::regex_replace(src, std::wregex(L"ナ"), L"ら");
        src = std::regex_replace(src, std::wregex(L"ニ"), L"り");
        src = std::regex_replace(src, std::wregex(L"ヌ"), L"す");
        src = std::regex_replace(src, std::wregex(L"ネ"), L"え");
        src = std::regex_replace(src, std::wregex(L"ノ"), L"ろ");
        src = std::regex_replace(src, std::wregex(L"ハ"), L"な");
        src = std::regex_replace(src, std::wregex(L"ヒ"), L"ち");
        src = std::regex_replace(src, std::wregex(L"フ"), L"う");
        src = std::regex_replace(src, std::wregex(L"ヘ"), L"せ");
        src = std::regex_replace(src, std::wregex(L"ホ"), L"そ");
        src = std::regex_replace(src, std::wregex(L"マ"), L"は");
        src = std::regex_replace(src, std::wregex(L"ミ"), L"い");
        src = std::regex_replace(src, std::wregex(L"ム"), L"を");
        src = std::regex_replace(src, std::wregex(L"メ"), L"ね");
        src = std::regex_replace(src, std::wregex(L"モ"), L"よ");
        src = std::regex_replace(src, std::wregex(L"ヤ"), L"ま");
        src = std::regex_replace(src, std::wregex(L"ユ"), L"つ");
        src = std::regex_replace(src, std::wregex(L"ヨ"), L"こ");
        src = std::regex_replace(src, std::wregex(L"ラ"), L"さ");
        src = std::regex_replace(src, std::wregex(L"リ"), L"ひ");
        src = std::regex_replace(src, std::wregex(L"ル"), L"く");
        src = std::regex_replace(src, std::wregex(L"レ"), L"め");
        src = std::regex_replace(src, std::wregex(L"ロ"), L"ほ");
        src = std::regex_replace(src, std::wregex(L"ワ"), L"あ");
        src = std::regex_replace(src, std::wregex(L"ヲ"), L"ゆ");
        src = std::regex_replace(src, std::wregex(L"ン"), L"ん");
        src = std::regex_replace(src, std::wregex(L"ッ"), L"っ");
        src = std::regex_replace(src, std::wregex(L"ガ"), L"だ");
        src = std::regex_replace(src, std::wregex(L"ギ"), L"じ");
        src = std::regex_replace(src, std::wregex(L"グ"), L"づ");
        src = std::regex_replace(src, std::wregex(L"ゲ"), L"ぜ");
        src = std::regex_replace(src, std::wregex(L"ゴ"), L"ど");
        src = std::regex_replace(src, std::wregex(L"ザ"), L"ば");
        src = std::regex_replace(src, std::wregex(L"ジ"), L"ぎ");
        src = std::regex_replace(src, std::wregex(L"ズ"), L"ぶ");
        src = std::regex_replace(src, std::wregex(L"ゼ"), L"べ");
        src = std::regex_replace(src, std::wregex(L"ゾ"), L"ご");
        src = std::regex_replace(src, std::wregex(L"ダ"), L"が");
        src = std::regex_replace(src, std::wregex(L"ヂ"), L"び");
        src = std::regex_replace(src, std::wregex(L"ヅ"), L"ぐ");
        src = std::regex_replace(src, std::wregex(L"デ"), L"げ");
        src = std::regex_replace(src, std::wregex(L"ド"), L"ぼ");
        src = std::regex_replace(src, std::wregex(L"バ"), L"ざ");
        src = std::regex_replace(src, std::wregex(L"ビ"), L"ぢ");
        src = std::regex_replace(src, std::wregex(L"ブ"), L"ず");
        src = std::regex_replace(src, std::wregex(L"ベ"), L"で");
        src = std::regex_replace(src, std::wregex(L"ボ"), L"ぞ");
        src = std::regex_replace(src, std::wregex(L"パ"), L"ぷ");
        src = std::regex_replace(src, std::wregex(L"ピ"), L"ぽ");
        src = std::regex_replace(src, std::wregex(L"プ"), L"ぱ");
        src = std::regex_replace(src, std::wregex(L"ペ"), L"ぴ");
        src = std::regex_replace(src, std::wregex(L"ポ"), L"ペ");
        src = std::regex_replace(src, std::wregex(L"ァ"), L"ぁ");
        src = std::regex_replace(src, std::wregex(L"ィ"), L"ぃ");
        src = std::regex_replace(src, std::wregex(L"ゥ"), L"ぅ");
        src = std::regex_replace(src, std::wregex(L"ェ"), L"ぇ");
        src = std::regex_replace(src, std::wregex(L"ォ"), L"ぉ");
        src = std::regex_replace(src, std::wregex(L"ッ"), L"っ");
        src = std::regex_replace(src, std::wregex(L"ャ"), L"ゃ");
        src = std::regex_replace(src, std::wregex(L"ュ"), L"ゅ");
        src = std::regex_replace(src, std::wregex(L"ョ"), L"ょ");
 
        return src;
    }
    inline
    std::wstring FromJapaneseToAlbed(std::wstring src)
    {
        src = std::regex_replace(src, std::wregex(L"あ"), L"ワ");
        src = std::regex_replace(src, std::wregex(L"い"), L"ミ");
        src = std::regex_replace(src, std::wregex(L"う"), L"フ");
        src = std::regex_replace(src, std::wregex(L"え"), L"ネ");
        src = std::regex_replace(src, std::wregex(L"お"), L"ト");
        src = std::regex_replace(src, std::wregex(L"か"), L"ア");
        src = std::regex_replace(src, std::wregex(L"き"), L"チ");
        src = std::regex_replace(src, std::wregex(L"く"), L"ル");
        src = std::regex_replace(src, std::wregex(L"け"), L"テ");
        src = std::regex_replace(src, std::wregex(L"こ"), L"ヨ");
        src = std::regex_replace(src, std::wregex(L"さ"), L"ラ");
        src = std::regex_replace(src, std::wregex(L"し"), L"キ");
        src = std::regex_replace(src, std::wregex(L"す"), L"ヌ");
        src = std::regex_replace(src, std::wregex(L"せ"), L"ヘ");
        src = std::regex_replace(src, std::wregex(L"そ"), L"ホ");
        src = std::regex_replace(src, std::wregex(L"た"), L"サ");
        src = std::regex_replace(src, std::wregex(L"ち"), L"ヒ");
        src = std::regex_replace(src, std::wregex(L"つ"), L"ユ");
        src = std::regex_replace(src, std::wregex(L"て"), L"セ");
        src = std::regex_replace(src, std::wregex(L"と"), L"ソ");
        src = std::regex_replace(src, std::wregex(L"な"), L"ハ");
        src = std::regex_replace(src, std::wregex(L"に"&#4...


[ 続き ]
最後に編集したユーザー naohiro19 [ 2018年2月18日(日) 19:47 ], 累計 2 回

コメント数: 0 閲覧数: 69

[C++] std::shared_ptrのサンプル

パーマリンクby naohiro19 on 2018年1月31日(水) 00:15 カテゴリー: プログラミング

えぴ流 C++ 実装スタイル プロ生勉強会 第10回@品川 #pronamaよりプログラムをそのまま移しました。
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <iostream>
#include <string>
#include <vector>
#include <memory>
#include <algorithm>
using namespace std;
 
class pet {
    string name_;
protected:
    string name() const { return name_; }
    virtual void do_make_sound() const = 0;
public:
    pet(const char* name) : name_(name) {}
    virtual ~pet() { cout << name() << " dctor." << endl; }
    void make_sound() const { do_make_sound(); }
};
 
class dog : public pet {
protected:
    virtual void do_make_sound() const { cout << name() << ": わんわんおー" << endl; }
public:
    dog(const char* name) : pet(name) {}
};
 
class cat : public pet {
protected:
    virtual void do_make_sound() const { cout << name() << ": にゃんにゃんおー" << endl; }
public:
    cat(const char* name) : pet(name) {}
};
 
 
 
int main()
{
    vector<shared_ptr<pet>> pets;
 
    vector<shared_ptr<cat>> cats;
    cats.push_back(make_shared<cat>("タマ"));
    cats.push_back(make_shared<cat>("ミケ"));
    cats.push_back(make_shared<cat>("Kitty"));
    for_each(cats.begin(), cats.end(), [](shared_ptr<cat> pet) {pet->make_sound(); });
    {
        vector<shared_ptr<dog>> dogs;
        dogs.push_back(make_shared<dog>("ポチ"));
        dogs.push_back(make_shared<dog>("コロ"));
        dogs.push_back(make_shared<dog>("Lassie"));
        for_each(dogs.begin(), dogs.end(), [](shared_ptr<dog> pet) {pet->make_sound(); });
 
        pets.push_back(cats[0]);
        pets.push_back(dogs[0]);
        pets.push_back(cats[1]);
        pets.push_back(dogs[1]);
 
    }
   
    for_each(pets.begin(), pets.end(), [](shared_ptr<pet> pet) { pet->make_sound(); });
    cout << "That's it." << endl;
}

実行結果は以下のとおりです。
コード[Text]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
タマ: にゃんにゃんおー
ミケ: にゃんにゃんおー
Kitty: にゃんにゃんおー
ポチ: わんわんおー
コロ: わんわんおー
Lassie: わんわんおー
Lassie dctor.
タマ: にゃんにゃんおー
ポチ: わんわんおー
ミケ: にゃんにゃんおー
コロ: わんわんおー
That's it.
Kitty dctor.
タマ dctor.
ポチ dctor.
ミケ dctor.
コロ dctor.

ideone.com上の実行でも同じ結果になりました。

コメント数: 0 閲覧数: 187

[C++] 正規表現ライブラリ

パーマリンクby naohiro19 on 2018年1月29日(月) 12:17 カテゴリー: プログラミング

C++でも C++11で追加された正規表現ライブラリが使えるようになっています。

以下のサンプルは「2015-12-31」という文字列を正規表現を使って「2015年12月31日」に置き換えるサンプルプログラムです。
C++の正規表現ライブラリはJavaScriptの正規表現と互換性があります。
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
#include <regex>
using namespace std;
 
int main()
{
    string date = "2015-12-31";
    regex re(R"((\d{4})-(\d{2})-(\d{2}))");
    string fmt = "$1年$2月$3日";
    string result = regex_replace(date, re, fmt);
    cout << result << endl;
}

コメント数: 0 閲覧数: 213

[C++] std::stackを使った10進数を2進数に変換するプログラム

パーマリンクby naohiro19 on 2018年1月25日(木) 00:18 カテゴリー: プログラミング

Cではchar型の配列を用いて変換したものを逆順に表示すればいいですが、かなり桁数が多いと配列オーバーを起こして今います。
C++ では <stack> というヘッダーファイルが用意されるのでpushしたあとにtopで2進数を表示し、popで削除を行えばできます。

以下が書いたプログラムになります。
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <stack>
 
using namespace std;
 
int main()
{
   
    stack<int> st;
 
    int n;
 
    cout << "任意の整数を入力してください >";
    cin >> n;
 
    int temp = n;
 
    while (n != 0) {
        st.push(n % 2);
        n /= 2;
    }
 
    cout << temp << "を2進数に変換すると";
    while (!st.empty()) {
        cout << st.top();
        st.pop();
    }
    cout << "になります。" << endl;
    return 0;
}


実行例:
任意の整数を入力してください >100
100を2進数に変換すると1100100になります。

tempは用意したのかというと入力された値を保持して表示するときに使うので用意しました。

コメント数: 2 閲覧数: 323

[C++]数字を漢数字に変換するプログラム

パーマリンクby naohiro19 on 2018年1月22日(月) 23:52 カテゴリー: プログラミング

こちらのC#版のプログラムをC++に移植してみました。

以下ソースコードです。
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
#include <locale>
#include <vector>
#include <string>
 
using namespace std;
 
wstring ToKansuji(long number)
{
    if (number == 0) {
        return L"〇";
    }
    vector<wstring> kl = { L"", L"十", L"百", L"千" };
    vector<wstring> tl = { L"", L"万", L"億", L"兆", L"京" };
    vector<wstring> nl = { L"", L"一", L"二", L"三", L"四", L"五", L"六", L"七", L"八", L"九" };
    wstring str = L"";
    int keta = 0;
 
    while (number > 0) {
        int k = keta % 4;
        int n = static_cast<int>(number % 10);
 
        if (k == 0 && number % 1000 > 0) {
            str = tl[keta / 4] + str;
        }
 
        if (k != 0 && n == 1) {
            str = kl[k] + str;
        }
        else if(n != 0) {
            str = nl[n] + kl[k] + str;
        }
        keta++;
        number /= 10;
    }
    return str;
}
 
int main()
{
    wcout.imbue(locale("japanese"));
    wcout << ToKansuji(0) << endl; // →  〇
    wcout << ToKansuji(100) << endl; // → 百
    wcout << ToKansuji(1255) << endl; // →  千二百五十五
    wcout << ToKansuji(10000) << endl; // → 一万
    wcout << ToKansuji(999999) << endl; // →  九十九万九千九百九十九
    return 0;
}


実行結果はコメントで書いてあります。
タイトルが間違っていましたので修正しました。
最後に編集したユーザー naohiro19 [ 2018年1月23日(火) 07:46 ], 累計 1 回

コメント数: 0 閲覧数: 278

オンラインデータ

登録ユーザー: みけCAT

cron