[问题] 删除字串特定符号

楼主: 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