我正在使用ifstream和getline逐行讀取輸入文件(比如在string line
中)。我必須通過刪除它的第一個字符輸出string line
到一個文件。我在做什麼是erase
行的第一個字符並使用ofstream輸出它。有沒有更好的方法來做到這一點(意味着相對較快的方法)?我有數以百萬計的字符串。 (請注意,對於所有行,這僅適用於每10行的第一行)。C++:通過刪除第一個字符來將文件寫入文件
回答
您可以輸出的實際字符串指針加一個:
outputStream << (line.c_str() + 1);
不過,你最好檢查字符串不是空的第一個,或者你可能最終訪問非法指針。
如果你想輸出一個子串,那麼就是std::string::substr
函數。或者使用std::ostream::write
功能與指針運算上述組合:
outputStream.write(line.c_str() + 1, 9); /* 1st to 10th character */
針對上述情況,你必須確保該字符串的長度至少爲10個字符。
注意:我個人不會在這個答案中使用「黑客」,除非在極端情況下。子字符串函數是有原因的,是我推薦使用的。
是** line.c_str()+ 1 **會比**擦除**更快嗎? – user1838343 2013-02-11 08:15:44
@ user1838343是的,因爲你沒有擦除任何東西,你只需從第二個字符開始輸出而不是修改字符串。 – 2013-02-11 08:18:14
@ user1838343然而,你應該做一些測量和分析,看看這是否真的是一個瓶頸。 – 2013-02-11 08:18:46
我假設你正在使用的std :: string ...
std::string str; // contains the line
str.substr (1, str.length() - 1); // gives you what you need
最佳,阿科什
這可能效率不高,除非實現是寫時複製。此外,您可以省略第二個參數,因爲默認情況下函數會將字符串從第一個參數複製到結尾。 – 2013-02-11 08:48:05
也許最快的方式來寫整個字符串沒有第1字符爲@JoachimPileborg答案。 但是如果你想從1日到10日寫10個字符,那麼最快的方法是使用fwrite
函數而不是fstream
。
fwrite(line.c_str() + 1, 1, 10, file);
請注意,您應該使用它非常準確。你應該放心,該線有超過10個字符。
我想先試試最簡單的方法,看看它的速度不夠快:
if (!mystring.empty())
std::copy(mystring.begin() + 1, mystring.end(),
std::ostreambuf_iterator<char>(stream_object));
你需要<algorithm>
和<iterator>
頭。
- 1. 將一個字符串寫入文件
- 2. 寫一個批處理文件來刪除帶有通配符的文件
- 3. PHP只將第一個276個字符寫入文件
- 4. 將字符串寫入C++文件(QT4)
- 5. 通過使用C#修改某些字符來寫入文本文件?
- 6. 將一個Tokenized字符串寫入一個文本文件?
- 7. 編寫一個批處理文件來刪除所有文件
- 8. 將字符串寫入超過4095個字符的文件
- 9. 字符串文件的Xcode - 刪除第一和最後一個「+;
- 10. 將中文字符從一個文件寫入另一個文件
- 11. 通過傳遞嵌入文件來刪除文檔
- 12. C從文本文件中刪除第一行而不重寫文件
- 13. 將文件寫入另一個文件
- 14. 刪除一個文本文件在C#中的第一行
- 15. 如何通過matlab將字符串流寫入MS word文件?
- 16. 通過FTP將ANSI字符串寫入Unicode文件
- 17. 通過XHR上傳文件並將文件寫入文件
- 18. 通過shell刪除文件
- 19. 通過SFTP刪除文件
- 20. 通過列C++寫入文件列
- 21. Java:將一個字符串寫入一個JPG文件
- 22. c將字符串寫入文件中,逐行寫入
- 23. 將文字寫入文件?
- 24. 從C++文件中刪除「funny」字符
- 25. 跳過c中的文本文件的第一個輸入c
- 26. IPC通過寫入文件?
- 27. 通過PHP寫入文件
- 28. 刪除第一個文件夾名稱
- 29. 循環僅刪除第一個文件
- 30. 將字符串寫入C文本文件中留下幾個字符
你需要更好地闡述這個問題... – 2013-02-11 08:12:33
@SolorzanoJose,有沒有任何方法來輸出字符串從第1個char到C++中的第10個字符? – user1838343 2013-02-11 08:13:35