2014-02-24 308 views
-4

我有一個字符串代表一個文件名,我想刪除這個擴展名,所以擦除「。」後面的所有內容。什麼是最好的方法?謝謝。從一個字符串中刪除一個子字符串

+0

請在您尋求幫助時顯示一些您嘗試的內容。 – yasouser

+0

那麼'file.tar.gz'你也需要處理這個嗎? – ST3

回答

1

如果您使用的是Windows,下面的函數就可以了:

std::wstring StripFileExtension(std::wstring fileName) 
{ 
    WCHAR tempBuffer[MAX_PATH]; 

    if (fileName.empty()) 
    { 
    return TEXT(""); 
    } 

    wcscpy(tempBuffer, fileName.c_str()); 
    PathRemoveExtension(tempBuffer); 

    return tempBuffer; 
} 
+0

謝謝大家,因爲我在Windows上,我將使用這個「就緒」功能。 – user2370139

+0

@ user2370139那麼請接受我的回答。我很高興這會爲你工作! – computerfreaker

+0

@ user2370139這是相當短視的。如果您可以編寫可移植代碼,爲什麼要編寫不可移植代碼? – juanchopanza

0

可以使用的std :: string,並且每個字符複製到新的字符串

std::string name = "filename.jpg", newname =""; 
int thelength = 0; 
for(int i=name.length();i>0;i--){ 
    if(name[i] != '.'){ 
      thelength++; 
    } 
    else{ 
     break; 
    } 
} 
for(int i=0;i<(name.length()-thelength);i++){ 
    newname+=name[i]; 
} 
+0

OP問題如何回答? –

+0

我忘了檢查'。' – Krofz

+0

這仍然不能正確回答問題;有兩個擴展名的文件名將會丟失它們。這可能不是預期的行爲,取決於提問者的需求。 – computerfreaker

2

下面的代碼可以用於相同的目的。

int npos = str.find_last_of('.'); 
str = str.substring(0,npos); 
相關問題