2012-10-09 86 views
0

所以我需要分析用戶的輸入方式如下:如果用戶輸入C++解析字符串,找到發生

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

OR

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

後來我想刪除文件和只是保存

C:\Program\Folder\NextFolder\ 

我基本上想要找到第一次出現從最後開始,如果他們把一個尾部的斜線,然後我可以找到第二次發生。我可以decifer第一或第二,此代碼:

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

但我不知道如何找到第一次出現開始從最終。有任何想法嗎?

+2

C:\ Program \ Folder \ NextFolder \ File.txt \不是文件,這是目錄! –

回答

0

如果您使用的是C++字符串,請嘗試使用字符串上的reverse iterator,以便在可接受的和不可接受的內容上編寫自己的邏輯。我提供的鏈接中有一個明顯的例子。

從我猜測,你正試圖存儲目錄名給定的路徑,可能是一個文件或目錄結束。

如果是這種情況,最好是刪除尾部的'\'並檢查它是否是一個目錄,如果是,則停止;否則,如果不是,則繼續。

或者,您可以嘗試將'\'上的字符串拆分爲兩部分。一些相關說明here.

如果這些是實際的文件名,(看起來像您使用的是Windows),那麼請嘗試使用_splitpath函數。

1

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

是非常低效的*。用途:

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

尋找的東西第一次出現,從年底開始是一樣找到最後一個「東西」,從頭開始。您可以使用find_last_of,或rfind或者,你甚至可以使用標準find,與rbegin合併和rend


* std::string::substr創建一個字符串,"/"可能創造另一個(取決於std::string::operator!=),兩個字符串並破壞比較臨時對象。


注意

C:\程序\文件夾\ NextFolder \ FILE.TXT \

不是一個文件的路徑,這是一個目錄。

+0

@downvoter - 你能解釋一下嗎? –

1

如果您inputstd::string型的(我認爲這是),你可以使用string::find爲正常的搜索和string::rfind反向搜索(年底開始)搜索一下,也來檢查最後一個字符,你不需要和你不應該使用substr,因爲它只是爲了檢查一個字符而創建一個新的字符串實例。您可能會說if(input.back() == '/')