7

使用字符数组写入标准输出最直接的方法是什么?我想输出一个更大数组的切片,并且切片不是以空值结尾的。我想避免将切片复制到“正确的”以空结尾的 c 字符串。

4

5 回答 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 回答