如何在没有getline的情况下用c ++获取文件中的空格字符

时间:2012-08-16 09:20:34

标签: c++ file

我正在使用c ++并逐个字符地读取文件。我使用>>做到了运营商。但是当空间出现时它会显示错误,因为在这种情况下它不会接受输入。那么,如何在不使用getline的情况下获得空格字符。

4 个答案:

答案 0 :(得分:3)

您可以使用std::istreambuf_iterator

#include <fstream>
#include <iterator>
#include <iostream>

int main()
{
    std::ifstream file("file.txt");

    std::istreambuf_iterator<char> it(file), end;

    for (; it != end; ++it) {
        std::cout << *it;
    }
}

如果以二进制模式打开文件,在缓冲区中一次读取整个文件然后继续处理它,您将获得更好的性能:

 #include <vector>
 #include <fstream>

 int main()
 {
      std::ifstream file("file.txt", std::ios::binary);
      file.seekg(0, std::ios::end);  // seek to the end
      std::streamsize size = file.tellg();  // get the position (file size)
      file.seekg(0, std::ios::beg);  // seek back to the beginning

      std::vector<char> buffer(size);
      file.read(&buffer[0], size);

      // do the work on vector
 }

答案 1 :(得分:3)

您是否尝试过使用istream& get ( char& c );?它一次读取一个字符。以下示例说明了如何:

char c;
while ( cin.get(c) )
{
    cout << "> " << c << endl;
}

运行它给出:

echo "hello world" | ./sing_in 
> h
> e
> l
> l
> o
>  
> w
> o
> r
> l
> d
> 

如果没有关于你正在做什么的进一步线索,我无法确切地说它是否会对你有帮助而且我不理解你使用getline

的沉默

答案 2 :(得分:0)

如果您想逐个阅读文件,请不要使用>>

ifstream File ("file.txt");
char Buffer[ARBITRARY_SIZE];
File.read(Buffer, ARBITRARY_SIZE);

然后,您可以解析缓冲区。它快得多。它也会比.get()更快。您可以在Buffer上运行所有正常的字符串操作(例如,将其转换为stringstream)。然后,所有操作都将在内存中完成。

答案 3 :(得分:0)