[問題] 刪除字串特定符號

作者: hyhjcjy (翊玥)   2014-06-06 15:51:41
要讀入某個資料夾底下的所有檔案,然後作一些處理後存成同檔名的txt檔,
再取用這些txt檔到MATLAB作圖。
但是讀取檔名的時候都會包含副檔名例如 myfile.dex
存成新檔名就會變成 myfile.dex.txt。
=====================以下是大略的程式碼===========================
vector<string> files = vector<string>();
getfiles(dir, files);
for(unsigned int i=0; i<files.size(); i++){
string filename=files[i].c_str();
string filenameWithPath= dir+filename;
FILE *f_infile = fopen(filenameWithPath,"rb");
sprintf(filenameWithPath,"%s_proc.txt",filename.c_str());
FILE* f_stats = fopen(filenameWithPath,"wt");
doSomeProcess(f_infile,f_stats);
fclose(f_stats);
fclose(f_infile)
}
======================================================
可是這種myfile.dex.txt有好幾個"."的檔名在MATLAB處理上會發生一些問題,
所以想在一開始讀進來的檔名字串filename中把"."拿掉。
存成myfiledex.txt就好。
我查過可以使用erase,但是會當機。程式碼如下:
filename.erase(filename.end()-4); //倒數第四個字串後全部刪除
sprintf(filenameWithPath,"%s_proc.txt",filename.c_str());
FILE* f_stats = fopen(filenameWithPath,"wt");
就是只有加入有註解的那行而已。 預計可以刪除".dex"的部分。
Compile會過,Run會當機。
查了很久erase的使用,看不出是什麼問題,求幫助!!><"
作者: Killercat (殺人貓™)   2014-06-06 17:11:00
string::erase應該是傳回處理過的string而非自己erase自己吧?不過這種東西我會建議用cstyle string(char*)效率跟便捷程度會高一點所以先不管其他錯 你應該是a = a.erase(....)er.... 忘了我剛說的 我弄錯了 我跟java行為弄混了XD
作者: legendmtg (CLANNAD)   2014-06-06 19:04:00
是死在sprintf吧... filenameWithPath是string不是c-style string另外你的erase只有刪除倒數第四個 不是倒數第四以後建議用boost::filesystem 可以直接處理副檔名...
作者: noodleT (麵T)   2014-06-08 08:56:00
如果是要直接變更某資料夾底下的副檔名:CD C:/testREN *.dex *.txt可以試試看上面兩行(命令提示字元)

Links booklink

Contact Us: admin [ a t ] ucptt.com