Boost なしで C++03 を使用しています。
次のような文字列があるとします。その日は「月曜日」です
これを処理したい
THEDAYIS月曜日
つまり、引用符に含まれていないものは大文字に変換し、引用符に含まれていない空白は削除します。
文字列に引用符が含まれていない場合がありますが、含まれている場合は 2 つしかありません。
STL アルゴリズムを使用してみましたが、引用符内にあるか、要素間にないかを覚える方法に行き詰まります。
もちろん、古き良き for ループでそれを行うこともできますが、気の利いた C++ の方法があるかどうか疑問に思っていました。
ありがとう。
これは私がforループを使用しているものです
while (getline(is, str))
{
// remove whitespace and convert case except in quotes
temp.clear();
bool bInQuote = false;
for (string::const_iterator it = str.begin(), end_it = str.end(); it != end_it; ++it)
{
char c = *it;
if (c == '\"')
{
bInQuote = (! bInQuote);
}
else
{
if (! ::isspace(c))
{
temp.push_back(bInQuote ? c : ::toupper(c));
}
}
}
swap(str, temp);