std::basic_streambuf<CharT,Traits>:: sputbackc
|
int_type sputbackc
(
char_type c
)
;
|
||
将一个字符放回获取区域。
如果在获取区域中存在回退位置(
gptr
(
)
>
eback
(
)
),且字符
c
等于
gptr()
左侧一个位置的字符(通过
Traits
::
eq
(
c, gptr
(
)
[
-
1
]
)
判断),则仅递减下一个指针(
gptr()
)。
否则,调用 pbackfail ( Traits :: to_int_type ( c ) ) 来回退获取区域,或同时修改获取区域及可能关联的字符序列。
I/O流函数 basic_istream::putback 是基于此函数实现的。
目录 |
参数
| c | - | 要回退的字符 |
返回值
如果回退位置可用,则返回下一个指针当前指向的字符,该字符已通过
Traits
::
to_int_type
(
*
gptr
(
)
)
转换为
int_type
。此streambuf的下一次单字符输入将返回该字符。
如果回退位置不可用,则返回 pbackfail() 的返回值,失败时为 Traits :: eof ( ) 。
示例
#include <iostream> #include <sstream> int main() { std::stringstream s("abcdef"); // gptr() 指向 "abcdef" 中的 'a' std::cout << "回退前,字符串内容为 " << s.str() << '\n'; char c1 = s.get(); // c1 = 'a',gptr() 现在指向 "abcdef" 中的 'b' char c2 = s.rdbuf()->sputbackc('z'); // 等同于 s.putback('z') // gptr() 现在指向 "zbcdef" 中的 'z' std::cout << "回退后,字符串内容为 " << s.str() << '\n'; char c3 = s.get(); // c3 = 'z',gptr() 现在指向 "zbcdef" 中的 'b' char c4 = s.get(); // c4 = 'b',gptr() 现在指向 "zbcdef" 中的 'c' std::cout << c1 << c2 << c3 << c4 << '\n'; s.rdbuf()->sputbackc('b'); // gptr() 现在指向 "zbcdef" 中的 'b' s.rdbuf()->sputbackc('z'); // gptr() 现在指向 "zbcdef" 中的 'z' int eof = s.rdbuf()->sputbackc('x'); // 无内容可回退:pbackfail() 失败 if (eof == EOF) std::cout << "'z' 之后无回退空间\n"; }
输出:
回退前,字符串内容为 abcdef 回退后,字符串内容为 zbcdef azzb 'z' 之后无回退空间
参见
|
将输入序列中的下一个指针向后移动一位
(公开成员函数) |
|
|
将字符放回输入流
(
std::basic_istream<CharT,Traits>
的公开成员函数)
|