作者andy00012 ( )
看板C_and_CPP
標題[問題] 有關於輸出txt檔檔名問題
時間Thu Oct 14 16:42:00 2010
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 )
( 未必需要依照此格式,文章條理清楚即可 )
遇到的問題: (題意請描述清楚) 小弟之前有爬過文章了
無奈c++底子不好
現在希望可以產生多個txt檔
for(int i2=1 ;i2<=5 ;i2++)
{ _____希望這邊可以輸出 output1.txt
| output2.txt
V .
ofstream outFile("output.txt");
.
output x.txt
//---------------中間是輸出的檔案-------------------------------
for(int g2=0 ; g2<=6 g2++)
{
outFile <<predecessor << ","<<cost[f2][1] << endl;
}
//------------------------------------------------------------
}
所以我這邊寫一個i2的迴圈 希望檔名可以從1~~5輸出5個txt檔
無奈不知這邊該如何修改
開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) c++
有問題的code: (請善用置底文標色功能) 補充說明: --
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.138.16.55
→ andy00012:感謝高手回應 10/14 16:42
推 stupid0319:"output"+i2+".txt" <在java這麼寫就可以了 10/14 16:46
→ andy00012:不好意思 我使用的是c++不過好像這樣不太行耶 10/14 16:48
推 stupid0319:char buf[20] = "outputx.txt"; 10/14 16:52
→ stupid0319:*(buf+6) = i2 + '0'; 10/14 16:53
→ stupid0319:outFile(buf); 10/14 16:53
→ MOONRAKER:喔天啊,sprintf就好了啦 10/14 16:54
→ Saunders:sprintf(buf, "output%1d.txt", i2); 10/14 17:04
推 legnaleurc:osstream ... 10/14 17:15
推 xatier:stupid0319大的做法超強 XD 10/14 17:23
→ james732:我還沒學會 sprintf 之前也是用 stupid0319 那招 10/14 17:34
→ james732:效率說不定還比較好 XDDD 只是沒啥彈性而言 10/14 17:34
→ tropical72:sprintf(buf,"output%0*d.txt",3,i2); 這算有彈性吧? 10/14 17:43
→ james732:我是說 stupid0319 那招沒彈性啦 XD 10/14 17:44
→ tropical72:誤會一場 XD 10/14 17:45
→ walm20:純推osstream 10/14 17:45
→ tropical72:推樓上..原來string還可以這麼用.. 10/14 19:21
→ loveme00835:new String("output") + i + new String(".txt") 二樓 10/14 20:01
→ loveme00835:打的其實是這樣, 然後再隱含呼叫 i 的 toString 方法, 10/14 20:02
→ loveme00835:差只差在這些String物件是放在字串池還是還是堆積中 10/14 20:03
→ loveme00835:就會做的動作上來說, 根本是不同的! 不要拿出來誤導別 10/14 20:04
→ loveme00835:人, 在 C++ 比較快的方法是用 string 物件的operator+ 10/14 20:04
→ loveme00835:做一個串接式的語法 : string("output") + itoa( i ) 10/14 20:05
→ loveme00835:+ ".txt", 從左而右持續生成新的string物件再輸出, 不 10/14 20:06
→ loveme00835:過因為itoa 這函式不是標準的, 所以用sstream才是最正 10/14 20:07
→ loveme00835:式的方法 10/14 20:07
→ purpose:他繼承了iostream的<<所以對很多型態都可以插入,只是目的 10/14 20:47
→ purpose:地不像cout是插入到螢幕,而是插入資料到 string 10/14 20:47
推 purpose:我的看法是C++要向後相容C語言,原本的"output"在C語言裡 10/14 20:55
→ purpose:不是一個物件,那+可以運作,是要透過運算子重載,所以非 10/14 20:56
→ purpose:物件的"output"跟整數,兩個是不能重載處理的,要講原則 10/14 20:57
推 loveme00835:不過我覺得就算講再多原則, 還是會有人說「我覺得很難 10/14 20:58
→ loveme00835:用」試都沒試也甚至不會試就把你的意見駁回, 講再多也 10/14 20:59
→ loveme00835:沒用 10/14 20:59
推 purpose:大家價值觀不同嘛 10/14 21:00
→ loveme00835:等等可能會有「用string就不能使用cstring裡的函式」 10/14 21:01
→ loveme00835:這種論調 10/14 21:01
推 tropical72:樓上的cstring是指 MFC-CString?(雖覺推論似乎不成立.. 10/14 21:06
推 loveflames:是c++的cstring 10/14 21:09
→ loveme00835:cstring = string.h + namespace std + using 10/14 21:12
→ tropical72:哈.看懂什麼意思了.中了CString的毒 XD 10/14 21:13
→ james732:其實能達到目的就好,不必這樣的... 10/14 23:12
→ james732:倒是這個問題有沒有打算收錄精華區 XD 看過好多次了說 10/14 23:12
推 BlazarArc:我會用 stringstream 硬幹 XD 10/14 23:20
推 BlazarArc:原來purpose大已經推過了 10/14 23:26
→ BlazarArc:ofstream outFile((name.str()).c_str()); 10/14 23:27
推 loveme00835:樓上為什麼要多那層括號? 10/14 23:28
推 nowar100:j大的建議 我聽到了 XD 我今天看到這篇也有這種想法... 10/15 00:28
→ tropical72:題外話..版規第三條可以更新了 XD 10/15 00:43
→ nowar100:Updated. 10/15 01:53