Search on the blog

2013年5月15日水曜日

知ってると便利なC++のstringテクニック

charからstringへの変換
みなさんどうやってますか?

僕はよく以下のように書きます。(ここでは、char型のcをstring型のsに変換したいとします。)
#include <iostream>

using namespace std;

int main() {

    char c = 'a';
    string s;
    s += c;

    return 0;
}

以下のように書く人をよく見かけますが、これは無駄にソース量が多いのではと思います。
#include <iostream>
#include <sstream>

using namespace std;

int main() {

    char c = 'a';
    string s;
    stringstream ss;

    ss << c;
    ss  >> s;

    return 0;
}

ちょっと考えてみましたが、下のように書くのが一番いいのでは。
#include <iostream>

using namespace std;

int main() {

    char c = 'a';
    string s(1, c);

    return 0;
}


母音判定
普通に書くとこうなります。
#include <iostream>

using namespace std;

int main() {

    char c = 'a';

    if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u')
        cout << "vowel" << endl;
    else
        cout << "consonant" << endl;

    return 0;
}

ifの中が多くて面倒くさいです。以下のように書くとスマートになります。

#include <iostream>

using namespace std;

int main() {

    char c = 'a';

    if (~string("aeiou").find(c))
        cout << "vowel" << endl;
    else
        cout << "consonant" << endl;

    return 0;
}

少し長くなってしまいますが、以下のような書き方もあります。

#include <iostream>

using namespace std;

int main() {

    char c = 'a';

    if (~string(1, c).find_first_of("aeiou"))
        cout << "vowel" << endl;
    else
        cout << "consonant" << endl;

    return 0;
}

0 件のコメント:

コメントを投稿