文字列を大文字に変換するにはどうしたらよいでしょうか。ググって出てきた例では、文字を扱うものばかりでした。
struct convert {
void operator()(char& c) { c = toupper((unsigned char)c); }
};
// ...
string uc_str;
for_each(uc_str.begin(), uc_str.end(), convert());
注: トップのソリューションにはいくつかの問題があります。
21.5 ヌル文字で終わっている配列のユーティリティー **
これらのヘッダの内容は、標準Cライブラリのヘッダ <ctype.h>, <wctype.h>, <string.h>, <wchar.h>, <stdlib.h> [...]と同じでなければなりません。
つまり、cctype
のメンバーは、標準的なアルゴリズムで直接使用するのには適していないマクロである可能性があります。
同じ例のもう一つの問題は、引数をキャストしたり、これが非負であることを検証していないことです。これは、プレーンな char
が署名されているシステムでは特に危険です。(理由は、これがマクロとして実装される場合、おそらくルックアップテーブルを使用し、引数はそのテーブルにインデックスされます。負のインデックスはUBを与えます)。