使用字符数组写入标准输出最直接的方法是什么?我想输出一个更大数组的切片,并且切片不是以空值结尾的。我想避免将切片复制到“正确的”以空结尾的 c 字符串。
问问题
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
好的,这是“愚蠢想法部门”:
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 回答
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 回答