C++でstd :: string :: iteratorsを使用するのに苦労しています。このコードは、(正しい出力を得ることはできませんが、それでも私の誤りです:TODO、アルゴリズムを修正してください)Dev-C++でコンパイルしても、ランタイムエラーは発生しません。エラーは、Visual Studio Express 2008 C++で、< xstring>: "式:文字列反復子が逆参照できません"を指すエラーが発生し、< xstring>ファイルの112行目を指しています。式:文字列イテレータを逆参照できない
私のデバッグでは、私は文入力の最後を逆参照しようとしている可能性があると言いますが、私はどこに見えません。誰か光を当てることはできますか?最初の場合はfalseの場合はそう二式が評価されていない
while (it != sentence.end() && *it != ' ')
へ
std::string wordWrap(std::string sentence, int width)
{
std::string::iterator it = sentence.begin();
//remember how long next word is
int nextWordLength = 0;
int distanceFromWidth = width;
while (it < sentence.end())
{
while (*it != ' ' && it != sentence.end())
{
nextWordLength++;
distanceFromWidth--;
it++;
}
if (nextWordLength > distanceFromWidth)
{
*it = '\n';
distanceFromWidth = width;
nextWordLength = 0;
}
//skip the space
it++;
}
return sentence;
}
+1。私はポイント2のコードを完全なコードブロックと説明と一致させるように修正しました。 –
ありがとうございます。私はそれを知っているので(コンパイラは余分なイテレータをコピーすることを知っています)、!=を使用しています。 !=でコンパイルするときにエラーが発生していました。文字列が連続していることがわかって以来、私は休憩を取っていました。私はスタックのようなものでは同じことをしません。質問:あなたのコードでは、ループ外に出たら例外をスローする方が良いでしょうか?あなたのソリューションでは、あなたはただ戻ります。それはいくつかの重大な問題を隠すことができるようです。 – jkeys
私はループ外で何を意味するのか分かりません。上記のコードは安全であり、例外をスローする必要はありません。 – GManNickG