2

この簡単なプログラムを実行しました:

#include <iostream>
#include <string>
using namespace std;

#include <boost/regex.hpp>

int main ()
{

//    boost::regex fullname_regex ("[A–Z]+[a–z]*, [A-Z][a–z]*");
boost::regex fullname_regex ("[A-Z]+[a-z]*, [A-Z][a-z]*");

string name;
cout << "Enter you full name: " << flush;

getline (cin, name);
if (! regex_match (name, fullname_regex))
{
    cout << "Error: name not entered correctly" << endl;
}

return 0;
}

どこかからコピーしたばかりです。コメント行 (元のコピー/貼り付けの一部) のコメントを外し、次の行 (自分で入力) をコメントすると、プログラムは常に名前を拒否します。それ以外の場合は、期待どおりに機能します。私はvimを使用しています。私は:set list隠し文字を見ましたが、セリフは同じです。ディスク障害 (非常に古いシステム) を疑って、元の行を下に移動するために、元の行の前に長いコメントを挿入しましたが、それでも同じエラーが発生しました。これはGUIのない​​ubuntuサーバーです。これにはパテを使用します。私は Linux でのこのような問題に慣れていません。この奇妙な動作を説明できる理由を誰か知っている人がいたら、教えてください。たぶん、vim は元のページのいくつかのオプションをまだ使用していますが、実際にはここ:set listにあり、フォーマットされていますが、それらは表示されませんか?

4

4 に答える 4

6

ダッシュは同じではありません。コメントされたものは長く、異なる文字で表されているため、解釈が異なります。一般的なコピー+貼り付けエラー。

http://en.wikipedia.org/wiki/Dash

于 2012-12-04T12:03:09.240 に答える
3

-コメントアウトされた行のその文字は U+2013 EN DASHであり、ASCII ダッシュ U+002d ではありません。

私が使用しているビットマップ フォントが限られているため、ファイルを開くときに Unicode 文字が既に突き出ていますが、g8コマンドを使用して、カーソル下の文字の UTF-8 エンコード値を出力:call search('[^\x00-\x7F]')したり、次の非文字列を見つけるために使用したりできます。 -ASCII 文字。

于 2012-12-04T12:08:45.557 に答える
1
于 2012-12-04T13:21:45.593 に答える
1

コードをテキスト エディターに貼り付けたところ、コメント行の最初の [AZ] が実際には長いダッシュを使用していることがすぐにわかりました。

入力した単純なダッシュが必要です。

于 2012-12-04T12:04:56.080 に答える