Listing 3

using namespace System;
using namespace System::Text;
using namespace System::IO;

void Copy(TextReader^ inStream, TextWriter^ outStream);

int main()
{
  String^ str = "abcde";
/*1*/ StringReader^ inStream = gcnew StringReader(str);
/*2*/ StringWriter^ outStream = gcnew StringWriter;

/*3*/ StringBuilder^ sb = outStream->GetStringBuilder();
  Console::WriteLine("Capacity is {0}", sb->Capacity);

/*4*/ outStream->Write(static_cast<wchar_t>(inStream->Read()));
          // read/write the a
  outStream->Write('!');    // write a !
  outStream->Write(static_cast<wchar_t>(inStream->Read()));
          // read/write the b
  outStream->Flush();
  outStream->Write("Result = {0,4:0.##}", 10.0/3);
          // write formatted text
/*5*/ Console::WriteLine(outStream);  // calls StringWriter::ToString
/*6*/ Copy(inStream, outStream);
/*7*/ Console::WriteLine(outStream);
/*8*/ Console::WriteLine(sb);   // calls StringBuilder::ToString
/*9*/ inStream->Close();
  outStream->Close();
}

void Copy(TextReader^ inStream, TextWriter^ outStream) 
{
  int c;
  while ((c = inStream->Read()) != -1)
  {
    outStream->Write(static_cast<wchar_t>(c));
  }
}