文字配列を使用して stdout に書き込む最も簡単な方法は何ですか? はるかに大きな配列のスライスを出力したいのですが、スライスは null で終了していません。スライスを「適切な」null で終わる c-string にコピーすることは避けたいと思います。
3590 次
5 に答える
13
最初は見つけられなかった非常に明白な解決策があります。std::cout
のインスタンスですostream
。
void WriteChunk(char *buffer, size_t startpos, size_t length) {
std::cout.write(buffer + startpos, length);
}
std::cout.write
トリックもそうです。
于 2013-08-28T18:16:25.627 に答える
4
std::copy
あなたが望むことを正確に行うようです:
#include <iostream> // for std::cout
#include <algorithm> // for std::copy
#include <iterator> // for std::ostream_iterator
//...
char arr[] = "abcdefij";
std::copy(arr + 2, arr + 5, std::ostream_iterator<char>(std::cout, ""));
この例では、標準出力に書き込みます: cde
.
これがライブの例です。
于 2013-08-28T18:17:18.067 に答える
1
文字配列の境界がわかっている場合は、次のように記述できます。
char* arr = new char[N];
for(size_t i = min_indx; i < max_indx; ++i) {
cout << arr[i];
}
min_indx が 0 から N-1 の間にあり、max_indx が 0 から N の間にあることを確認する必要があります。
私たちは皆、ライブラリ関数で物事を行うのが好きなので、 を使用してそれを行う方法を次に示しますstd::copy
。
copy(arr + min_indx, arr + max_indx, ostream_iterator<char>(cout, ""));
于 2013-08-28T18:07:46.637 に答える
1
ostream::write
動作するはずです。
#include <iostream>
int main() {
char a[] = "ABCDEFGHIJ";
std::ostream out(std::cout.rdbuf());
out.write(a, 2);
}
編集
std::cout
ostream オブジェクト自体と同様に、別の ostream オブジェクトを作成する必要はありません。それでstd::cout.write
十分です。
于 2013-08-28T18:17:20.060 に答える
1
わかりました、これは「ばかげたアイデアの部門」です。
class partial_print_wrapper
{
private:
const char *str;
int start;
int end;
public:
partial_print_wrapper(const char *s, int st, int en) : str(s), start(st), end(en) {}
friend ostream& operator <<(ostream &os, const partial_print_wrapper& pw);
};
ostream& operator <<(ostream &os, const partial_print_wrapper& pw)
{
for(int i = pw.start; i < pw.end; i++)
{
os << pw.str[i];
}
return os;
}
char *s = "Something quite long";
cout << print_string_wrapper(s, 3, 8) << endl;
于 2013-08-28T18:11:36.973 に答える