2010-12-03 20 views
3

私は次のコードについて私のプログラムの助けを得ました。私は働いています、 'paxdiablo'に感謝します。結果に '\'文字が表示されています。どうすれば修正できますか? (SYAのおかげで「paxdiablo」を返信する方法がわからC++紹介:自己学習

if (strchr (",.();:-\"&?%$![]^@~`{}_<>/#*_+=", curChar) != NULL)//new change 
{ 
    paragraph.erase(subscript, 1); 
    numWords-=1; 
} 
else 
    subscript+=1; 

} 
+0

ご迷惑をおかけして申し訳ありません。私は文字に '\'を追加しようとしましたが、うまくいきませんでした。 – Luckwhy

+0

あなたのコードをもっと投稿する必要があるかもしれませんが、私はこれを理解することはできません。 – Puppy

+0

SQ FAQを読んでください:http://stackoverflow.com/faq –

答えて

1

削除したくない場合は「\」だけでなく、あなたがこれをしたい:。

if (strchr (",.();:-\\\"&?%$![]^@~`{}_<>/#*_+=", curChar) != NULL) 

理由は、元の行であること\"を持っていた、本当に"をエスケープしている。あなたはそれを逃れるために\\を行う必要があり\実際を追加する。

+0

ありがとうございます。クロスパスなら 'paxdiablo'に感謝してください。 – Luckwhy

+0

それは今働いています。そのような安堵。 – Luckwhy

5

ないCの専門家ではなく、\

をエスケープしてみてください
if (strchr ("\\,.();:-\"&?%$![]^@~`{}_<>/#*_+=", curChar) != NULL)//new change 
1

\はエスケープ文字です(「」をエスケープしています)。あなたの文字列に\\を追加すればうまくいくはずです。

if (strchr (",.();:-\"&?%$![]^@~`{}_<>/#*_+=\\", curChar) != NULL) 
1

それをエスケープしてみてくださいだけではなく、\

2

\\あなたが照合文字列がその中に\"を持っているかを参照してください?

これはエスケープシーケンスです。これは、C++コンパイラに ""シンボルをこの文字列リテラルに入れたい"と伝えます。通常は"が文字列の最後を示すため、この特殊な方法でこれを説明する必要があります。

\文字は、これらのエスケープシーケンスをすべて開始するため特殊です。文字列に表示したい場合は、エスケープシーケンスを使用する必要があります。それ以外の場合、コンパイラはあなたが他のエスケープシーケンスを開始していると考えます。

\のエスケープシーケンスは、奇妙にも、\\です。