如何在cout中插入N个字符
How to insert N characters into cout?
我正在滚动我自己的StringRef类(包括一个到内存中的char*
和一个长度为size_t
的类),但我一直在实现operator<<
。有没有一种方法(除了创建一个临时的以null结尾的char数组或std::string
之外)可以将N个字符插入cout
对象?
更新:澄清:
StringRef是一个对象,它由一个指向内存(在我的例子中是指向缓冲区)的指针和一个长度组成。缓冲的数据不是空终止的;我可以计算长度,并将其存储在StringRef对象中。我想为这个对象重载>>。我知道如何插入到cout中的"字符串"只有以null结尾的char数组和std::字符串。如何将StringRef(其中N是长度)指向的N个字符插入cout?
对于这种低级别类型,通常的解决方案是输出直接到streambuf:
std::ostream&
operator<<( std::ostream& dest, StringRef const& obj )
{
std::ostream::sentry s( dest );
if ( s ) {
std::streambuf* sb = dest.rdbuf();
if ( sb == nullptr ) {
dest.setstate( std::ios_base::badbit );
} else if ( sb->sputn( obj.characters, obj.count ) != obj.count ) {
dest.setstate( std::ios_base::badbit );
}
}
return dest;
}
对于复杂类型,这就不那么方便了,因为没有格式,但对于像您这样的简单类型,它是可能是优选的解决方案。
以下是的操作方法
friend std::ostream& operator << (ostream &oss, StringRef &obj) {
oss << obj.characters;
return oss;
}
要将它与基于范围的for循环一起使用,StringRef类应该看起来像:
class StringRef {
//... some other variables
char *characters;
int count;
public:
//...Other methods
const char *begin() { return &characters[0]; }
const char *end() { return &characters[count]; }
};
相关文章:
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- 在将字符插入 2d 字符串时如何不显示空字符?
- 如何将整数向量值插入字符向量
- 如何从代码本身向 wxwidgets 中的文本控件插入字符?
- C++ 在字符的开头插入字符
- C ++程序在字符数组中插入单词
- C++如果旋转是特定字符,请插入符号
- 将字符串逐个字符插入矢量
- 如何在文本文件中间插入字符
- 如何组合一个宽字符字符串,中间插入一些空字符
- C++代码,用于在用户插入的字符串的每个元音之后插入一对字符
- 通过字符串::插入插入字符时出错
- 在字符串中的字符前添加空格C++插入函数
- 如何在矢量"[i]"中插入*字符<string>?[C++]
- 在字符串之间插入字符
- 将字符插入字符串
- 将字符插入字符串中
- 将带有 new 的字符 * 插入到矢量C++中
- 使用C++将字符插入MYSQL表
- c++中每N个字符插入一个字符,改变N个字符