0

我是 C++ 新手,想知道如何使用 fstream 从文件中选择一定数量的字符并将其写入 C++ 中的字符串?

 fstream ifile;
 ifile.open("file.txt" ios::out);
 ifile << "1234567890";
 ifile.close();

然后以某种方式能够打开文件选择“567”并将其写入字符串缓冲区。谢谢

`

4

2 回答 2

0

您可以使用格式化的输入 astd::string最多读取一定数量的char. 但是,这并不意味着确实会读取尽可能多的字符,因为当达到指定的字符数时输入停止:

std::string str;
if (std::cin >> std::setw(3) >> str) {
    std::cout << "read '" << str << "'\n";
}
else {
    std::cout << "failed to read string\n";
}

当然,在空格处中断可能有点烦人。当然,可以使用自定义std::ctype<char>方面为流重新定义空白的含义:

#include <string>
#include <iostream>
#include <iomanip>
#include <locale>

struct ctype
    : std::ctype<char>
{
    ctype()
        : std::ctype<char>(table)
    {
    }
    std::ctype_base::mask table[std::ctype<char>::table_size];
};

int main()
{
    std::string str;
    std::cin.imbue(std::locale(std::locale(), new ctype));
    if (std::cin >> std::setw(30) >> str) {
        std::cout << "read '" << str << "'\n";
    }
    else {
        std::cout << "failed to read string\n";
    }
}
于 2013-09-27T22:09:36.467 回答
0

假设您需要打开文件流中的 3 个字符,从索引 4 开始:

char ra[7];
if (ifile.read(7)) {
    std::string result(ra+4, ra+7);
} else {
    // read failed
}

如果起始索引比4您可能考虑的要大得多,seekg或者ignore,跳过不需要的字符而不是将它们读入缓冲区。

于 2013-09-27T23:56:56.667 回答