1

コードの共通ヘッダーに aを見つけたusing namespace std;ので、それを削除したいと思います。

したがって、vectorコード内のすべての を に置き換える必要がありstd::vectorます。

次のケースを無視する式を grep する必要があります。

std::vector
// comment with a vector
"string with a vector"

のように置き換えてしまわないように

std::std::vector
// comment with a std::vector
"string with a std::vector"

これまでのところ、式を使用して「std::vector」のケースを無視することができました

grep "^[^:]*vector" *.h

しかし、次のような否定を構成するのに問題があります。

  • " X "を検索しますが、" YX " や " Y.*X "は検索しません

誰でも助けることができますか?

4

4 に答える 4

4

あなたはそれを不正行為と呼ぶかもしれませんが、私はすべてstd::vectorstd::fectorで置き換え、すべてを で置き換え、次にすべてvectorをで置き換えます。std::vectorstd::fectorstd::vector

クールではありませんが、1 回限りの解決策であれば、複雑な式を作成するよりも早く問題を解決できるでしょう。表現だけを考えることは、それを実行するよりも時間がかかります。

ただし、プログラムが std::fector を使用していないことを確認してください:)

于 2013-09-10T11:03:32.593 に答える
2

この入力を考えると

$ cat a
std::vector
// comment with a vector
"string with a vector"
replace this vector

ANDになるようにgrepをパイプする必要があります。それ以外の場合はegrep "condition1|condition2"、OR になります。

       skip :vector        skip starting with "    skip starting with /
            ----                   -----                 -----
$ grep "^[^:]*vector" a | grep "^[^\"]*vector"   |     grep "^[^/]"
replace this vector
于 2013-09-10T11:02:55.427 に答える
2

vector を頻繁に使用していない限り、using 宣言を削除して手動でエラー メッセージを調べることができます。通常、ベクトルをインスタンス化する場所を変更するだけで済みますが、それほど頻繁に変更する必要はありません。

于 2013-09-10T11:54:30.357 に答える
1

私が通常これを行う方法は、グローバルに に置き換え\<vector\>std::vectorから、グローバルに に置き換える\<std::std::こと std::です。

于 2013-09-10T11:24:42.367 に答える