Język C++
basic_streambuf::sputbackc
[metoda] Umieszcza znak na końcu obszaru odczytywania danych.Składnia
#include <streambuf>
namespace std
{
template < class CharT, class Traits = std::char_traits < CharT > >
class basic_streambuf
{
public:
int_type sputbackc( char_type c );
};
}
Argumenty
Zwracana wartość
Jeśli pozycja dopisywania danych była dostępna, funkcja zwraca znak (rzutowany na typ
int_type
przez wywołanie
Traits::to_int_type( * gptr() )
), na który wskazuje następny wskaźnik. Następna próba odczytu pojedynczego znaku zwróci właśnie taką wartość. W innym przypadku funkcja zwraca wartość otrzymaną od funkcji
pbackfail()
.
Dodatkowe informacje
Jeśli pozycja wskaźnika dopisywania danych jest dostępna w obszarze ich odczytywania (wywołanie
gptr() > eback()
zwraca wartość
true
) oraz znak podany jako argument jest równy pierwszemu znakowi na lewo od znaku określanego przez funkcję
gptr()
(występuje wywołanie
Traits::eq( c, gptr()[ - 1 ] )
), wtedy wystarczy wykonać dekrementację następnego wskaźnika (
gptr()
). Inaczej następuje wywołanie
pbackfail( Traits::to_int_type( c )
, aby przywrócić obszar pobierania do poprzedniego stanu lub zmienić zarówno ten obszar, jak również powiązaną sekwencję znaków. Funkcja
putback()
jest zaimplementowana na podobnych warunkach, jak ta funkcja.
Przykład
#include <iostream>
#include <sstream>
int main()
{
std::stringstream stream( "to jest tekst." );
std::cout << "Przed: \"" << stream.str() << "\"\n";
char first = static_cast < char >( stream.get() );
char second = static_cast < char >( stream.rdbuf()->sputbackc( 'T' ) );
std::cout << "Po: \"" << stream.str() << "\"\n";
char third = static_cast < char >( stream.get() );
char fourth = static_cast < char >( stream.get() );
std::cout << "Pierwszy: \'" << first << "\'\n"
<< "Drugi: \'" << second << "\'\n"
<< "Trzeci: \'" << third << "\'\n"
<< "Czwarty: \'" << fourth << '\'';
stream.rdbuf()->sputbackc( 'o' );
stream.rdbuf()->sputbackc( 't' );
int eof = stream.rdbuf()->sputbackc( 'O' );
if( eof == EOF ) std::cout << "\nNiedozwolone wstawienie znaku 'O' przed 't'!";
std::cout << "\nOstatecznie: \"" << stream.str() << '\"';
return 0;
}
Standardowe wyjście programu:
Przed: "to jest tekst."
Po: "To jest tekst."
Pierwszy: 't'
Drugi: 'T'
Trzeci: 'T'
Czwarty: 'o'
Niedozwolone wstawienie znaku 'O' przed 't'!
Ostatecznie: "to jest tekst."
Linki zewnętrzne
Wszystkie teksty są chronione prawami autorskimi. Kopiowanie lub rozpowszechnianie treści poza niniejszym serwisem
jest zabronione.
Powyższe ograniczenie nie dotyczy autora opracowania, któremu przysługuje prawo do rozpowszechniania własnego tekstu wedle własnego uznania.