0

したがって、次の方法でユーザーの入力を解析する必要があります。

C:\Program\Folder\NextFolder\File.txt

また

C:\Program\Folder\NextFolder\File.txt\

次に、ファイルを削除して保存したい

C:\Program\Folder\NextFolder\

私は基本的に、最後から始まる最初の出現を見つけたいと思っています\。末尾にスラッシュを付けると、2番目の出現を見つけることができます。このコードを使用して、1 番目または 2 番目を判別できます。

input.substr(input.size()-1,1)!="/"

しかし、最後から最初の出現を見つける方法がわかりません。何か案は?

4

3 に答える 3

1

あなたinputがタイプの場合std::string(私はそれだと思います)string::find、通常の検索とstring::rfind逆検索( end から start )を使用して検索できます。また、必要のない最後の文字をチェックすることもsubstrできます。 1文字をチェックするだけの文字列の新しいインスタンス。あなたはただ言うかもしれませんif( input.back() == '/' )

于 2012-10-09T19:14:30.417 に答える
1

これ

input.substr(input.size()-1,1)!="/"

非常に非効率です*。使用する:

if( ! input.empty() && input[ input.length() - 1 ] == '/' )
{
    // something
}

何かの最初の出現を最後から見つけることは、最後の「何か」を最初から見つけることと同じです。find_last_of、またはを使用するrfindこともできますし、標準の をおよび とfind組み合わせて使用​​することもできます。rbeginrend


* std::string::substr1 つの部分文字列を"/"作成し、おそらく別の部分文字列を作成し (依存しますstd::string::operator!=)、2 つの文字列を比較し、一時オブジェクトを破棄します。


ご了承ください

C:\Program\Folder\NextFolder\File.txt\

ファイルへのパスではなく、ディレクトリです。

于 2012-10-09T19:13:23.280 に答える
0

C++ 文字列を使用している場合は、文字列に対して逆反復子を試して、許容できるものとそうでないものについて独自のロジックを記述します。私が提供したリンクに明確な例があります。

私が推測したところ、ファイルまたはディレクトリで終わる可能性のあるパスを指定して、ディレクトリ名を保存しようとしています。

その場合は、末尾の「\」を削除してディレクトリかどうかを確認し、ディレクトリである場合は停止するか、そうでない場合は続行することをお勧めします。

または、'\' の文字列を 2 つの部分に分割してみてください。ここにいくつかの関連するメモがあります。

それらが実際のファイル名である場合 (Windows を使用しているように見えます)、_splitpath関数も試してください。

于 2012-10-09T19:13:18.120 に答える