私はc ++を使用して、ファイルを1文字ずつ読み取っていました。>>演算子を使用してそれを行いました。ただし、スペースが表示されると、その入力が受け入れられないため、間違って表示されます。では、getline を使用せずにスペース文字を取得するにはどうすればよいでしょうか。
質問する
1102 次
4 に答える
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
}
于 2012-08-16T09:27:16.513 に答える
3
使ってみましたistream& get ( char& c );
か?一度に 1 文字を読み取ります。次の例は、その方法を示しています。
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
于 2012-08-16T09:27:41.347 に答える
0
istream.get(char&)
を使用できますistream.get()
: http://www.cplusplus.com/reference/iostream/istream/get/
また
<iomanip>
ヘッダーから- : http://www.cplusplus.com/reference/iostream/manipulators/noskipws/noskipws
の例を参照してください。
于 2012-08-16T09:30:17.223 に答える
0
ファイルを文字単位で読み取りたい場合は、使用しないでください>>
。
ifstream File ("file.txt");
char Buffer[ARBITRARY_SIZE];
File.read(Buffer, ARBITRARY_SIZE);
次に、バッファを解析するだけです。それははるかに高速です。よりも高速になり.get()
ます。Buffer に対してすべての通常の文字列操作を実行できます (たとえば、stringstream に変換します)。その後、すべての操作はメモリ内で行われます。
于 2012-08-16T09:27:03.950 に答える