2012-06-14 61 views
0

我有一個字符串,它是像"c:\x\y\z"修改文件路徑使用printf中

我希望它在形式"c://x//y//z"

我嘗試使用stdString.replace("\","//");但它不工作。

有什麼建議?

+1

ü可以嘗試使用stdString.replace( 「\\」,」 //「);看看http://stackoverflow.com/questions/2417588/escaping-ac-string –

+0

謝謝..領先一步。但這個錯誤出現 錯誤C2782:「無效的std ::代替(_FwdIt,_FwdIt,常量_Ty&,常量_Ty&)」:模板參數 '_Ty' 不明確 1> C:\程序\微軟的Visual Studio 10.0 \ VC \包括\算法(1317):的看到聲明 '的std ::替換' 1 >可能是'int' 1>或'char' –

+0

@RohitKabra我的猜測是你沒有閱讀答案。你檢查了我發佈的鏈接嗎?你讀過'替換'的作品嗎? –

回答

5

如果字符串爲"c:\x\y\z",也有你的字符串沒有\\表示轉義字符。將您的字符串更改爲"c:\\x\\y\\z"

另外,還要注意如何replace作品 - http://www.cplusplus.com/reference/string/string/replace/

我不認爲你可以用兩個"//"直接替換一個字符'\\'。 (我可能被證明是錯誤的)。

備選:

std::stringstream ss; 
for (int i = 0 ; i < str.size() ; i++) 
{ 
    if (str[i] == '\\') 
     ss << "//"; 
    else 
     ss << str[i]; 
} 
str = ss.str(); 
+0

@Rohit Kabra,他的意思是使用'\ x'例如,使得該'\'充當轉義字符,而不是字符'\'。所以你必須用'\\ x'代替。除非該字符串是從外部源讀取的,在這種情況下,我相信這個效果會被處理(它隻影響硬編碼/常量值)。 – nemesisfixx

+0

字符串正在從外部源讀取,我需要轉換爲我後來添加它「/ w」。 –

+1

@RohitKabra你檢查了我提供的鏈接嗎?我認爲你濫用string.replace。 –

0
stdString.replace("\\","\/\/"); ? 
+1

''/''不需要轉義(儘管它可以在許多編譯器上運行)。更重要的是,'std :: string :: replace()'沒有一個與你發佈的內容相匹配的表單(或者做它看起來你期望的內容)。 –

0

,如果你硬編碼的文件路徑在你的源代碼,那麼你可能會改變價值"c:\\x\\y\\z"