我正在使用 ifstream 和 getline(比如 in )逐行读取输入文件string line
。我必须string line
通过删除文件的第一个字符来输出到文件。我正在做的是erase
ing 行的第一个字符并使用 ofstream 输出它。有没有更好的方法(意味着相对更快的方法)?我有数以百万计的字符串。(请注意,并非所有行都如此,仅适用于每 10 行的第一行)。
问问题
891 次
4 回答
2
我会先尝试最简单的方法,看看它是否足够快:
if (!mystring.empty())
std::copy( mystring.begin() + 1, mystring.end(),
std::ostreambuf_iterator<char>(stream_object) );
你需要<algorithm>
和<iterator>
标题。
于 2013-02-11T10:08:44.193 回答
1
您可以输出实际的字符串指针加一:
outputStream << (line.c_str() + 1);
但是,您最好先检查字符串是否为空,否则您可能最终会访问非法指针。
如果你想输出一个子字符串,有这个std::string::substr
函数。或者使用std::ostream::write
与上述指针算法相结合的函数:
outputStream.write(line.c_str() + 1, 9); /* 1st to 10th character */
对于上述情况,您必须确保字符串的长度至少为十个字符。
注意:除非在极端情况下,否则我个人不会使用此答案中概述的“黑客”。子字符串函数的存在是有原因的,并且是我推荐使用的函数。
于 2013-02-11T08:13:23.117 回答
0
我假设您正在使用 std::string ...
std::string str; // contains the line
str.substr (1, str.length() - 1); // gives you what you need
最好的,阿科斯
于 2013-02-11T08:15:50.763 回答
0
也许在没有第一个字符的情况下编写整个字符串的最快方法是来自@JoachimPileborg 的回答。但是如果你想从第 1 到第 10 写 10 个字符,那么最快的方法是使用fwrite
function 而不是fstream
.
fwrite( line.c_str() + 1, 1, 10, file );
请注意,您应该非常准确地使用它。您应该放心,该行有超过 10 个字符。
于 2013-02-11T08:21:36.500 回答