まず、これが動作しない理由の説明:
String.find_first_of
は、入力として、Cスタイルの文字列(文字の配列)をとる関数です。 !
を追加することで何をしたいのですか?あなたのリストにない文字を見つけるように関数に指示しますが、そうするには、すべての可能なUnicode文字のリストから始め、 badchars
list。また、文字列は通常可能な文字のリストではなく、文字列であるため、コンパイラが意味することを知る方法はありません。したがって、!badchars
は、容易にstring is null
またはreverse string
を意味することができます。 C++
では、!
演算子は文字列に対しても定義されていないため、コンパイラはそれに不満を持ちます。
2番目:解決策。あなたが何をしたいか
は使用find_first_not_of
とfind_last_not_of
ですが、あなたは、あなたがこれらを使用することになっていないことに言及します。代わりに、あなたがする必要があるのは、一度に文字列の先頭に移動し、badlist
に文字が見えなくなるまでです。これを行うには、最初の番号の返りを止めるまで、find_first_of
という2番目の引数をインクリメントします。
// find the character immediately after any initial sequence of bad characters.
int start = 0;
while(temp.find_first_of(badlist, start) == start){start++;}
// now start is the index of the first character not in our list.
これで目的の出力が開始されましたが、まだ終了を見つける必要があります。これを行うには、基本的には上記と同じように逆に行います。この時点で
// find the character immediatly preceding the last sequence of bad characters
int end = temp.length - 1; // last index of the string
while(temp.find_last_of(badlist, end) == end){end--}
我々は出力に、少なくともいくつかの文字を含む文字列のための望ましい出力のstart
とend
を持っています。私は文字列が完全にbadlist
の文字で構成されているかどうかを判断するロジックを残します。
確かに方法があります。なぜあなたはすでに自分自身を試していたのですか?どのように失敗しましたか? [MCVE]を投稿してください(エラーメッセージはそのまま) –
'!badchars'はあなたが思っていることをしません。 –
あなたが知っている、 '!badcharsはあまりにも悪いアイデアではありません。残念ながら、言語はまだあなたに追いついていません。あなたは「goodchars」でそれをすることができますが、それは構築するのは面倒です。代わりに['find_first_not_of'](http://en.cppreference.com/w/cpp/string/basic_string/find_first_not_of)を試してみてください。 – user4581301