C++:通过删除第一个字符将字符串写入文件

c++: writing strings to file by removing first char

本文关键字:字符串 文件 字符 第一个 删除 C++      更新时间:2023-10-16

我正在使用ifstream和getline逐行读取输入文件(例如string line(。我必须通过删除文件的第一个字符来输出string line文件。我正在做的是erase行的第一个字符并使用ofstream输出它。有没有更好的方法可以做到这一点(意味着相对更快的方法(?我有数百万个字符串。(请注意,并非所有行都是如此,仅适用于每 10 行的第一行(。

我会先尝试最简单的方法,看看它是否足够快:

if (!mystring.empty())
    std::copy( mystring.begin() + 1, mystring.end(),
        std::ostreambuf_iterator<char>(stream_object) );

您需要<algorithm><iterator>标头。

您可以输出实际的字符串指针加一:

outputStream << (line.c_str() + 1);

但是,最好先检查字符串是否不为空,否则最终可能会访问非法指针。

如果要输出子字符串,可以使用std::string::substr函数。或者将 std::ostream::write 函数与上面概述的指针算法结合使用:

outputStream.write(line.c_str() + 1, 9);  /* 1st to 10th character */

对于上述内容,您必须确保字符串的长度至少为十个字符。

注意:除非在极端情况下,否则我个人不会使用"黑客"作为本答案中概述的黑客。子字符串函数的存在是有原因的,并且是我建议使用的函数。

我假设你正在使用std::string...

std::string str;  // contains the line
str.substr (1, str.length() - 1); // gives you what you need

贝斯特,阿科斯

也许在没有第一个字符的情况下编写整个字符串的最快方法是从@JoachimPileborg答案。但是如果你想从 1 号到 10 号写 10 个字符,那么最快的方法是使用 fwrite 函数而不是 fstream .

fwrite( line.c_str() + 1, 1, 10, file );

请注意,您应该非常准确地使用它。您应该放心,该行有超过 10 个字符。