使用GetBuffer后,必须使用ReleaseBuffer以更新对象内部数据
  例:csStr="abc";
  LPTSTR pStr=csStr.GetBuffer(10);
  strcpy(pStr,"12345");
  cout<<csStr.GetLength(); //3(错误的用法)
  csStr.ReleaseBuffer();
  cout<<csStr.GetLength(); //5(正确)
  pStr=NULL;
  //CString对象的任何方法都应在ReleaseBuffer之后调用
  LPTSTR GetBufferSetLength( int nNewLength );
  申请新的空间,并返回指针
  例:csStr="abc";
  csStr.GetBufferSetLength(20);
  cout<<csStr; //abc
  count<<csStr.GetLength(); //20;
  csStr.ReleaseBuffer();
  count<<csStr.GetLength(); //3;
  //使用GetBufferSetLength后可以不必使用ReleaseBuffer。
  1.CString::IsEmpty
  BOOL IsEmpty( ) const;
  返回值:如果CString 对象的长度为0,则返回非零值;否则返回0。
  说明:此成员函数用来测试一个CString 对象是否是空的。
  示例:
  下面的例子说明了如何使用CString::IsEmpty。
  // CString::IsEmpty 示例
  CString s;
  ASSERT( s.IsEmpty() );
  请参阅 CString::GetLength
  2.CString::Left
  CString Left( int nCount ) const;
  throw( CMemoryException );
  返回值:返回的字符串是前nCount个字符。
  示例:
  CString s( _T("abcdef") );
  ASSERT( s.Left(2) == _T("ab") );
  3.CString::LoadString
  BOOL LoadString( UINT nID );
  throw( CMemoryException );
  返回值:如果加载资源成功则返回非零值;否则返回0。
  nID 一个Windows 字符串资源ID。
  说明: 此成员函数用来读取一个由nID 标识的Windows 字符串资源,并放入一个已有CString 对象中。
  示例:
  下面的例子说明了如何使用CString::LoadString。
  // CString::LoadString 示例
  #define IDS_FILENOTFOUND 1
  CString s;
  if (! s.LoadString( IDS_FILENOTFOUND ))
  4.CString::MakeLower
  void MakeLower( ); //改变字符的小写
  5.CString::MakeReverse
  void MakeReverse( ); //字符倒置
  6.CString::MakeUpper
  void MakeUpper( ); //改变字符的大写
  7.CString::Mid
  CString Mid( int nFirst ) const;
  CString Mid( int nFirst, int nCount ) const;
  nCount代表要提取的字符数, nFirst代表要提取的开始索引位置
  示例:
  CString s( _T("abcdef") );
  ASSERT( s.Mid( 2, 3 ) == _T("cde") );
  8.CString::ReleaseBuffer
  void ReleaseBuffer( int nNewLength = -1 );
  参数:nNewLength
  此字符串的以字符数表示的新长度,不计算结尾的空字符。如果这个字
  符串是以空字符结尾的,则参数的缺省值-1 将把CString 的大小设置为
  字符串的当前长度。
  说明:
  使用ReleaseBuffer 来结束对由GetBuffer 分配的缓冲区的使用。如果你知道缓
  冲区中的字符串是以空字符结尾的,则可以省略nNewLength 参数。如果字符
  串不是以空字符结尾的,则可以使用nNewLength 指定字符串的长度。在调用
  ReleaseBuffer 或其它CString 操作之后,由GetBuffer 返回的地址是无效的。
  示例:
  下面的例子说明了如何使用CString::ReleaseBuffer。
  // CString::ReleaseBuffer 示例
  CString s;
  s = "abc";
  LPTSTR p = s.GetBuffer( 1024 );
  strcpy(p, "abc"); // 直接使用该缓冲区
  ASSERT( s.GetLength() == 3 ); // 字符串长度 = 3
  s.ReleaseBuffer(); // 释放多余的内存,现在p 无效。
  ASSERT( s.GetLength() == 3 ); // 长度仍然是3
  9.CString::Remove
  int CString::Remove ( TCHAR ch );
  返回值:返回从字符串中移走的字符数。如果字符串没有改变则返回零。
  参数:ch 要从一个字符串中移走的字符。
  说明:此成员函数用来将ch 实例从字符串中移走。与这个字符的比较是区分大小写
  的。
  示例:
  // 从一个句子中移走小写字母'c':
  CString str (“This is a test.”);
  int n = str.Remove( 't' );
  ASSERT( n == 2 );
  ASSERT( str ==“This is a es. ” );
  10.CString::Replace
  int Replace( TCHAR chOld, TCHAR chNew );
  int Replace( LPCTSTR lpszOld, LPCTSTR lpszNew );
  返回值:返回被替换的字符数。如果这个字符串没有改变则返回零。
  参数:chOld 要被chNew 替换的字符。
  chNew 要用来替换chOld 的字符。
  lpszOld 一个指向字符串的指针,该字符串包含了要被lpszNew 替换的字符。
  LpszNew 一个指向字符串的指针,该字符串包含了要用来替换lpszOld 的字符。
  说明:此成员函数用一个字符替换另一个字符。函数的第一个原形在字符串中用chNew
  现场替换chOld。函数的第二个原形用lpszNew 指定的字符串替换lpszOld 指定
  的子串。
  在替换之后,该字符串有可能增长或缩短;那是因为lpszNew 和lpszOld 的长度
  不需要是相等的。两种版本形式都进行区分大小写的匹配。
  示例:
  // 第一个例子,old 和new 具有相同的长度。
  CString strZap( “C - -” );
  int n = strZap.Replace('-', '+' );
  ASSERT( n == 2 );
  ASSERT(strZap == “C++” );
  // 第二个例子,old 和new 具有不同的长度。
  CString strBang( “Everybody likes ice hockey” );
  n = strBang.Replace( “hockey”, “golf” );
  ASSERT( n ==1 );
  n = strBang.Replace ( “likes” , “plays” );
  ASSERT( n == 1 );
  n = strBang.Replace( “ice”, NULL );
  ASSERT( n == 1 );
  ASSERT( strBang == “Everybody plays golg” );
  // 注意,现在在你的句子中有了一个额外的空格。
  // 要移走这个额外的空格,可以将它包括在要被替换的字符串中,例如,“ice ”。
  11.CString::ReverseFind
  int ReverseFind( TCHAR ch ) const;
  返回值: 返回此CString 对象中与要求的字符匹配的后一个字符的索引;如果没有找
  到需要的字符则返回-1。
  参数: ch 要搜索的字符。
  说明:此成员函数在此CString 对象中搜索与一个子串匹配的后一个字符。此函数
  类似于运行时函数strrchr。
  示例:
  // CString::ReverseFind 示例
  CString s( "abcabc" );
  ASSERT( s.ReverseFind( 'b' ) == 4 );
  12.CString::Right
  CString Right( int nCount ) const;
  throw( CMemoryException );
  返回值: 返回的字符串是后nCount个字符。
  CString s( _T("abcdef") );
  ASSERT( s.Right(2) == _T("ef") );
  13.CString:: SetAt
  void SetAt( int nIndex, TCHAR ch );
  说明:可以把字符串理解为一个数组,SetAt类似于[].注意nIndex的范围,如果不合适会有调试错误。 Ch 更替字符, 把nIndex位置上的字符 变成ch
  示例:
  CString s( "abc" );
  s.MakeReverse();
  ASSERT( s == "cba" );
  14.CString::TrimLeft
  void TrimLeft( );
  void CString::TrimLeft( TCHAR chTarget );
  说明:如果没有参数,从左删除字符( 空格等),至到遇到一个非此类字符. 当然你也可以指定删除那些字符. 如果指定的参数是字符串,那么遇上其中的一个字符删除.
   换行符
   TAB字符
  示例1:
  CString str = " a";
  str.TrimLeft();
  str为“a”;
  示例2:
  CString str = "abbcadbabcadb ";
  str.TrimLeft("ab");
  结果"cadbabcadb "
  str.TrimLeft("ac");
  结果"bcadbabcadb "
  15.CString::TrimRight
  void TrimRight( );
  void CString::TrimRight( TCHAR chTarget );
  void CString::TrimRight( LPCTSTR lpszTargets );
  说明:用法类似于上面。
  16.CString::Compare
  int Compare( LPCTSTR lpsz ) const;
  返回值:字符串一样返回0,小于lpsz 返回-1,大于lpsz 返回1, 区分大小字符
  示例:
  CString s1( "abc" );
  CString s2( "abd" );
  ASSERT( s1.Compare( s2 ) == -1 );
  ASSERT( s1.Compare( "abe" ) == -1
  17.CString::CompareNoCase
  int CompareNoCase( LPCTSTR lpsz ) const;
  返回值: 字符串一样 返回0,小于lpsz 返回-1,大于lpsz 返回1,不区分大小字符
  18.CString::Collate
  int Collate( LPCTSTR lpsz ) const;
  同CString::Compare
  19.CString::CollateNoCase
  int CollateNocase( LPCTSTR lpsz ) const;
  同CString::CompareNoCase
  20.CString::CString //构造函数
  CString( );
  CString( const CString& stringSrc );
  CString( TCHAR ch, int nRepeat = 1 );
  CString( LPCTSTR lpch, int nLength );
  CString( const unsigned char* psz );
  CString( LPCWSTR lpsz );
  CString( LPCSTR lpsz );
  示例:
  CString s1;
  CString s2( "cat" );
  CString s3 = s2;
  CString s4( s2 + " " + s3 );
  CString s5( 'x' ); // s5 = "x"
  CString s6( 'x', 6 ); // s6 = "xxxxxx"
  CString s7((LPCSTR)ID_FILE_NEW); // s7 = "Create a new document"
  CString city = "Philadelphia";
  21.CString::Delete
  int Delete( int nIndex, int nCount = 1);