天天看點

簡單MFC電腦(字元串形式,基于vs2017 我的實驗報告版本1.3)

上次說到我的MFC作業:

​​​MFC電腦最簡單版本(我的電腦1.1,和同學交流的結果)​​​​MFC簡單電腦(我的實驗報告1.2版本)​​ 實驗内容:

可以在多個題目中選擇一個:

1、編寫一本通信錄

2、模拟簡單電腦√

3、簡單的管理系統的設計:如人事、工資、學生成績等。(要求部分功能實作)。

4、迷宮生成器

1.對實驗結果進行分析

雖然我設計的MFC電腦,這是苦熬的2天3夜後結果,并沒有很多花哨的功能,但把所有基本的功能都實作了,從實驗的結果來看,實驗結果與預期達到一緻,實作了一些±*/這些功能,并且都是使用了極為簡潔的代碼,運用了CStringArray實作了多次計算,并且還注重了程式的完美。

按順序添加控鍵代碼,友善閱讀和使用。這篇價值還是有的,覺得不錯給個贊。但是, 其中是由bug的,但沒時間和精力搞了,隻能留給路過的大佬了,或者隻能之後的自己搞了。就是kf 開方,我雖然實作了計算,但不能9kf+1或1+9kf的運算。

2、完成編寫相關實驗代碼

①.整體架構的設計

1)首先,這個就是運作的可視化效果圖

簡單MFC電腦(字元串形式,基于vs2017 我的實驗報告版本1.3)

2)功能比較多,設定了2個編輯框,一個存放時間(打開軟體的時間),一個是顯示計算過程和結果。資料和運算符都是單行顯示。最難的是控鍵的空行設定和傳遞值。

2)功能比較多,設定了2個編輯框,一個存放時間(打開軟體的時間),一個是顯示計算過程和結果。資料和運算符都是單行顯示。最難的是控鍵的空行設定和傳遞值。

②.編寫代碼前的準備工作

簡單MFC電腦(字元串形式,基于vs2017 我的實驗報告版本1.3)

在右邊的編輯框添加變量,m_edit是控件,Cstring類型;m_edit_text是double類型的值。右邊編輯框要改一下屬性中的MultiLine 改為true,要可以換行。

③.代碼的編寫(主要的解釋會在每個代碼段裡呈現)

增加頭檔案:#include<cmath>
控鍵0-9,按下面代碼填寫
void CMFCApplication11Dlg::OnBnClickedButton1()
{
  m_edit_text.Append(_T("1"));//編輯框頁面增加‘1’
  UpdateData(FALSE);//顯示到編輯框了
}
增加了Π和e的控鍵
void CMFCApplication11Dlg::OnBnClickedButton13()// Π
{
  // TODO: 在此添加控件通知處理程式代碼
  m_edit_text.Append(_T("3.14159265359"));
  UpdateData(FALSE);
}

void CMFCApplication11Dlg::OnBnClickedButton11()//    e
{
  // TODO: 在此添加控件通知處理程式代碼
  m_edit_text.Append(_T("2.718282"));
  UpdateData(FALSE);
}


小數點’.’:

void CMFCApplication11Dlg::OnBnClickedButtonpoint()
{
  if (m_edit_text.Find(_T(".")) == -1) {
/* 加個判斷,如果編輯框控鍵中資料中發現已有小數點,就不增加小數點*/
    m_edit_text.Append(_T("."));
  }
    UpdateData(FALSE);
}

完善功能鍵
+:
void CMFCApplication11Dlg::OnBnClickedButtonadd()
{
  m_edit_text.Append(_T("\r\n"));//‘+’和上個資料換行
  m_edit_text.Append(_T("+"));
  m_edit_text.Append(_T("\r\n"));//和下一行資料分隔開
  UpdateData(FALSE);
}
-:
void CMFCApplication11Dlg::OnBnClickedButtonsub()
{

  m_edit_text.Append(_T("\r\n"));
  m_edit_text.Append(_T("-"));
  m_edit_text.Append(_T("\r\n"));
  UpdateData(FALSE);
}
*:
void CMFCApplication11Dlg::OnBnClickedButtonmul()
{
  m_edit_text.Append(_T("\r\n"));
  m_edit_text.Append(_T("*"));
  m_edit_text.Append(_T("\r\n"));
  UpdateData(FALSE);
}
/:

void CMFCApplication11Dlg::OnBnClickedButtondiv()
{
  m_edit_text.Append(_T("\r\n"));
  m_edit_text.Append(_T("/"));
  m_edit_text.Append(_T("\r\n"));
  UpdateData(FALSE);
}

後退:

void CMFCApplication11Dlg::OnBnClickedButtonback()
{
  m_edit_text.Delete(m_edit_text.GetLength() - 1);
  UpdateData(FALSE);
}
清零:

void CMFCApplication11Dlg::OnBnClickedButtonclear()
{
  m_edit_text.Empty();
  UpdateData(false);
}
階乘:


void CMFCApplication11Dlg::OnBnClickedButtonjiecheng()
{
  m_edit_text.Append(_T("\r\n"));
  m_edit_text.Append(_T("!"));
  UpdateData(FALSE);
}
Sin:

void CMFCApplication11Dlg::OnBnClickedButtonsin()
{
  m_edit_text.Append(_T("sin"));
  m_edit_text.Append(_T("\r\n"));
  UpdateData(FALSE);
}
Cos:
void CMFCApplication11Dlg::OnBnClickedButtoncos()
{
  m_edit_text.Append(_T("cos"));
  m_edit_text.Append(_T("\r\n"));
  UpdateData(FALSE);
}
Tan:

void CMFCApplication11Dlg::OnBnClickedButton31()
{
  m_edit_text.Append(_T("tan"));
  m_edit_text.Append(_T("\r\n"));
  UpdateData(FALSE);
}
%:
void CMFCApplication11Dlg::OnBnClickedButton30()//  %
{
  m_edit_text.Append(_T("\r\n"));
  m_edit_text.Append(_T("%"));
  UpdateData(FALSE);
}
About:

void CMFCApplication11Dlg::OnBnClickedButtonabout()
{
  CAboutDlg dlg;
  dlg.DoModal();
}
開方:
Kf:
void CMFCApplication11Dlg::OnBnClickedButtonkaifang()
{
  m_edit_text.Append(_T("\r\n"));
  m_edit_text.Append(_T("kf "));
  m_edit_text.Append(_T("\r\n"));
  UpdateData(FALSE);
}

開n次方:
Kn:
void CMFCApplication11Dlg::OnBnClickedButton26()
{
  m_edit_text.Append(_T("\r\n"));
  m_edit_text.Append(_T("kn"));
  m_edit_text.Append(_T("\r\n"));
  UpdateData(FALSE);
}
Log:


void CMFCApplication11Dlg::OnBnClickedButtonlog()
{
  m_edit_text.Append(_T("lg"));
  m_edit_text.Append(_T("\r\n"));
  UpdateData(FALSE);
}
Ln:

void CMFCApplication11Dlg::OnBnClickedButtonln()
{
  m_edit_text.Append(_T("ln"));
  m_edit_text.Append(_T("\r\n"));
  UpdateData(FALSE);
}
^:(幾次方)

void CMFCApplication11Dlg::OnBnClickedButton12()
{
  m_edit_text.Append(_T("\r\n"));
  m_edit_text.Append(_T("^"));
  m_edit_text.Append(_T("\r\n"));
  UpdateData(FALSE);
}

e^n:
void CMFCApplication11Dlg::OnBnClickedButton29()//e^n
{
  m_edit_text.Append(_T("e^"));
  m_edit_text.Append(_T("\r\n"));
  UpdateData(FALSE);
}

最重要的是’=’
double a, b, c; CStringArray  arr;
void CMFCApplication11Dlg::OnBnClickedButtonequal()
{
  int i, nLineCount = m_edit.GetLineCount();//m_myEdit是與edit控件關聯的變量
  //p = new int[nLineCount];
  /*CString h;
  h.Format(_T("%d"), nLineCount);
  MessageBox(h);*/
  CString strText;//, strLine;
  // Dump every line of text of the edit control.
  for (i = 0; i < nLineCount; i++)
  {
    int len = m_edit.LineLength(m_edit.LineIndex(i));  // length of line i:
    m_edit.GetLine(i, strText.GetBuffer(len), len);
    arr.SetAtGrow(i, strText);
  }

  int nLong = arr.GetSize();

  //  ^  !  sin  cos  tan   %  ^2   kf  kn  log   ln  e^n  

  for (i = 0; i < nLong; i++)
  {
    int len = arr[i].GetLength();
  // CHAR* tr = arr[i].GetBuffer(len);
    TCHAR* tr = arr[i].GetBuffer(len);
       CString s;
********************************************************************^  !
    if (tr[0] == '^')
    {
      
        a = _ttof(arr[i - 1]);
        b = _ttof(arr[i + 1]);
        c = pow(a, b);
        s.Format(_T("%lf"), c);
        arr[i] = s;
        arr.RemoveAt(i + 1);
        arr.RemoveAt(i - 1);
      i = 0;
    }

    if (tr[0] == '!')
    {
      a = _ttof(arr[i - 1]);
      //b = _ttof(arr[i + 1]);
      double temp=1;
      for (int i = 1; i <= a; i++)
      {
        temp *= i;
      }
      c = temp;
      CString s;
      s.Format(_T("%lf"), c);
      arr[i] = s; //MessageBox(s);
      //arr.RemoveAt(i + 1);
      arr.RemoveAt(i - 1);
      i = 0;
    }

*************************sin cos  tan  % 
    if (tr[0] == 's')//按字元搜尋,隻能選運算符的第一個字母

    {
      //a = _ttof(arr[i - 1]);
      b = _ttof(arr[i + 1]);
    double  num = (b*3.1415926) / 180; c= sin(num);
      CString s;
      s.Format(_T("%lf"), c);
      arr[i] = s;
      arr.RemoveAt(i + 1); //MessageBox(arr[i]);
      //arr.RemoveAt(i - 1);
      //i = 0;
    }

    if (tr[0] == 'c')    {
      //a = _ttof(arr[i - 1]);
      b = _ttof(arr[i + 1]);
      double  num = (b*3.1415926) / 180; c = cos(num);
      CString s;
      s.Format(_T("%lf"), c);
      arr[i] = s; 
      arr.RemoveAt(i + 1);
      //arr.RemoveAt(i - 1);
      i = 0;
    }


    if (tr[0] == 't')
    {
      //a = _ttof(arr[i - 1]);
      b = _ttof(arr[i + 1]);
      double  num = (b*3.1415926) / 180; c = sin(num)/cos(num);
      CString s;
      s.Format(_T("%lf"), c);
      arr[i] = s; //MessageBox(arr[i]);
      arr.RemoveAt(i + 1);
      //arr.RemoveAt(i - 1);
      i = 0;
    }


    if (tr[0] == '%')
    {
      a = _ttof(arr[i - 1]);
      //b = _ttof(arr[i + 1]);
      c = a *0.01;
      CString s;
      s.Format(_T("%lf"), c);
      arr[i] = s;
      //arr.RemoveAt(i + 1);
      arr.RemoveAt(i - 1);
      i = 0;
    }
    
    
    *******************************kf kn 

    if (tr[0] == 'k'&&tr[1]=='f')
/*因為kf 和kn存在第一個字元一樣會導緻二義性,是以還要判斷第二個字元*/
    {
      a = _ttof(arr[i - 1]);
    m_edit_text.Empty();  
    double f = _ttof(arr[0]);
      CString g;
      if (f - int(f) <= 1e-5)
      {
        g.Format(_T("%d"), (int)f);
      }
      else
      {
        g.Format(_T(" %f"), f);
      }
      m_edit_text.Append(g);
      m_edit_text.Append(_T("\r\n"));
      m_edit_text.Append(_T("kf"));
      UpdateData(FALSE);
      c = sqrt(a);
      CString s;
      s.Format(_T("%lf"), c);
      //arr[i-1] = s;
      //arr.RemoveAt(i + 1);
      arr.RemoveAll();
      arr.SetAtGrow(0, s);
      //arr.RemoveAt(i+1);
    }
    if (tr[0] == 'k'&&tr[1]=='n')
    {
      a = _ttof(arr[i - 1]);
      b = _ttof(arr[i + 1]);
      c = pow(a, 1/b);
      CString s;
      s.Format(_T("%lf"), c);
      arr[i] = s; 
      arr.RemoveAt(i + 1);
      arr.RemoveAt(i - 1);
      i = 0;
    }
******************ln和Ln
    if (tr[1] == 'g'&&tr[0]=='l')
    {
      //a = _ttof(arr[i - 1]);
      b = _ttof(arr[i + 1]);
      c = log10(b);
      CString s;
      s.Format(_T("%lf"), c);
      arr[i] = s;
      arr.RemoveAt(i + 1);
      //arr.RemoveAt(i - 1);
      
    }
    if (tr[1] == 'n'&&tr[0]=='l')
    {
      //a = _ttof(arr[i - 1]);
      b = _ttof(arr[i + 1]);
      c = log(b);
      CString s;
      s.Format(_T("%lf"), c);
      arr[i] = s;
      arr.RemoveAt(i + 1);
      //arr.RemoveAt(i - 1);
      i = 0;
    }

*******************************e^n
    if (tr[0] == 'e')
    {
      //a = _ttof(arr[i - 1]);
      b = _ttof(arr[i + 1]);
      c = exp(b);
      CString s;
      s.Format(_T("%lf"), c);
      arr[i] = s;
      arr.RemoveAt(i + 1);
      //arr.RemoveAt(i - 1);
      i = 0;
    }
    nLong = arr.GetSize();


  }
  
//  * 和/運算符

*********************************  * /
  for (i = 0; i < nLong; i++)
  {
    int len = arr[i].GetLength();
    TCHAR* tr = arr[i].GetBuffer(len);
    if (tr[0] == '*')
    {
      a = _ttof(arr[i - 1]);
      b = _ttof(arr[i + 1]);
      c = a * b;
      CString s;
      s.Format(_T("%lf"), c);
      arr[i] = s;
      arr.RemoveAt(i + 1);
      arr.RemoveAt(i - 1);
      i = 0;
    }
    if (tr[0] == '/')
    {
      a = _ttof(arr[i - 1]);
      b = _ttof(arr[i + 1]);
      if (b ==0) {
        MessageBox(_T("分母不為0"));
        c = 0;
      }
      c = a / b;
      CString s;
      s.Format(_T("%lf"), c);
      arr[i] = s;
      arr.RemoveAt(i + 1);
      arr.RemoveAt(i - 1);
      i = 0;
    }
    nLong = arr.GetSize();
  }


  //  +和-運算


  for (i = 0; i < nLong; i++)
  {
    int len = arr[i].GetLength();
    TCHAR* tr = arr[i].GetBuffer(len);
    arr[i].ReleaseBuffer();
    if (tr[0] == '+')
    {
      a = _ttof(arr[i - 1]);
      b = _ttof(arr[i + 1]);
      c = a + b;
      CString s;
      s.Format(_T("%lf"), c);
      arr[i] = s;
      arr.RemoveAt(i + 1);
      arr.RemoveAt(i - 1);
      arr.FreeExtra();
      i = 0;
    }
    if (tr[0] == '-')
    {
      a = _ttof(arr[i - 1]);
      b = _ttof(arr[i + 1]);
      c = a - b;
      CString s;
      s.Format(_T("%lf"), c);
      arr[i] = s;
      arr.RemoveAt(i + 1);
      arr.RemoveAt(i - 1);
      arr.FreeExtra();
      i = 0;
    }
    nLong = arr.GetSize();
  

    if (nLong == 1)//電腦編輯框資料隻剩一位時,顯示換行再“=”再換行顯示結果
    {
      m_edit_text.Append(_T("\r\n"));
      m_edit_text.Append(_T("="));
      m_edit_text.Append(_T("\r\n"));
      CString s; 
      s = arr[0];
      double result = _ttof(s);
      if (result- int(result) <= 1e-5)
      {
        s.Format(_T("%d"), (int)result);
      }
      else
      {
        s.Format(_T(" %f"), result);
      }
      arr[0] = s;
      m_edit_text.Append(arr[0]);
      UpdateData(FALSE);
    }
  }
}      

特效1:最小化:

void CMFCApplication11Dlg::OnBnClickedButton14()
{
  AfxGetMainWnd()->CloseWindow();
}      
簡單MFC電腦(字元串形式,基于vs2017 我的實驗報告版本1.3)
簡單MFC電腦(字元串形式,基于vs2017 我的實驗報告版本1.3)

特效2:顯示時間:

1.找到BOOL CMFCApplication11Dlg::OnInitDialog()函數,增加代碼

BOOL CMFCApplication11Dlg::OnInitDialog()
{
  CDialogEx::OnInitDialog();

  CString strTime;
  CTime tm;
  tm = CTime::GetCurrentTime();         //擷取目前系統時間
  strTime = tm.Format("%y年%m月%d日 %X");   //格式化系統時間。即使系統時 間按照Format中設定的格式顯示
  SetDlgItemText(IDC_EDIT4, strTime);        //初始化編輯框顯示
  SetTimer(1, 1000, NULL);         //啟動定時器      

2.CMFCApplication11Dlg.h頭檔案裡增加

afx_msg void CMFCApplication11Dlg::OnTimer(UINT_PTR nIDEvent);      
簡單MFC電腦(字元串形式,基于vs2017 我的實驗報告版本1.3)

3.再回到CMFCApplication11Dlg.cpp檔案裡

void CMFCApplication11Dlg ::OnTimer(UINT_PTR nIDEvent)
{
  // TODO:  在此添加消息處理程式代碼和/或調用預設值
  CString strTime;
  CTime tm;
  tm = CTime::GetCurrentTime();
  strTime = tm.Format("%Y-%m-%d %H:%M:%S");
  SetDlgItemText(IDC_EDIT4, strTime);        //顯示系統時間
  CMFCApplication11Dlg::OnTimer(nIDEvent);
}      
簡單MFC電腦(字元串形式,基于vs2017 我的實驗報告版本1.3)

特效3:退出

void CMFCApplication11Dlg::OnBnClickedButtonononcancel()
{
  if (MessageBox(_T("确認退出"), _T(""), MB_YESNO | MB_ICONQUESTION) == IDYES) {
    this->SendMessage(WM_CLOSE);
  }
}      
簡單MFC電腦(字元串形式,基于vs2017 我的實驗報告版本1.3)

3、對本次實驗要有總結

注意:要求在系統設計階段對資料結構(主要是類的結構及類之間的聯系)進行分析研究,充分利用面向對象的特性,使類結構盡可能合理和高效。

重要的函數:

1.m_edit_text.Append(_T("\r\n"));
2.m_edit_text.Delete(m_edit_text.GetLength() - 1);
3.m_edit_text.Empty();
4.int nLineCount = m_edit.GetLineCount();
5.Int  len = m_edit.LineLength(m_edit.LineIndex(i));//length of line i:
    6.m_edit.GetLine(i, strText.GetBuffer(len), len);
    7.arr.SetAtGrow(i, strText);
8.arr.RemoveAt(i + 1);
      arr.RemoveAt(i - 1);
9.arr.FreeExtra();

如文中:
for (i = 0; i < nLineCount; i++)
  {
    int len = m_edit.LineLength(m_edit.LineIndex(i));  // length of line i:
    m_edit.GetLine(i, strText.GetBuffer(len), len);
    arr.SetAtGrow(i, strText);
  }
10.if (f - int(f) <= 1e-5)
      {
        g.Format(_T("%d"), (int)f);
      }
      else
      {
        g.Format(_T(" %f"), f);
      }
把結果好看化,不需要“.000000”就去掉後面的,直接int化輸出

按行字元串,存儲再arr[i]中,CStringArray  arr;      

——————————————————————————————————————

相關知識:(友善自己以後看的)

CStringArray--字元串數組類
CStringArray類支援CString對象數組。
在使用一個數組之前,使用SetSize來建立它的大小并給它配置設定記憶體。如果你不使用SetSize,則向數組中添加元素時将導緻數組被頻繁地拷貝和配置設定記憶體。頻繁配置設定記憶體和拷貝會導緻效率低和記憶體零碎。
如果你需要數組中個别字元串元素的轉儲,則應該将轉儲環境的深度設定為1或更大。當一個CString數組被删除時,或當其中的個别元素被删除時,字元串記憶體被根據需要釋放。
CStringArray類成員
構造
CStringArray構造一個空的CString對象數組
綁定
GetSize 擷取這個數組中的元素數目
SetSize 設定這個數組中包含的元素數目
GetUpperBound 傳回最大的有效索引
操作符
FreeExtra 釋放目前數組邊界之外的未使用的所有記憶體
RemoveAll 從數組中删除所有元素
元素通路
GetAt 傳回位于給定索引處的值
SetAt 設定給定索引處的元素的值;不得将數組增大
ElementAt 傳回對數組中的某一進制素指針的臨時引用
GetData 對數組中的元素允許的通路。可以是NULL
擴大數組
SetAtGrow 設定給定索引處的值,如果必要的話可以增長數組
Add 在數組的末尾添加一個元素;可根據需要增長數組
Append 向數組中添加另一個數組;如果必要的話可增長數組
Copy 将另一個數組拷貝到此數組中;如果必要的話可增長數組
插入/删除
InsertAt 在指定索引處插入一個元素(或者是另一個數組中的所有元素)
RemoveAt 删除指定索引處的一個元素
操作符
operator []      

相關函數:

1、構造函數(常用)

CString( const unsigned char* psz );
  例:char s[]="abcdef";
          char* sp=s;
          CString csStr(sp);
  //csStr="abcdef"
  CString( LPCSTR lpsz );
  例:CString csStr("abcdef");
  //csStr="abcdef"
 CString( LPCWSTR lpsz );
 例: CString csStr(L"abcdef");
 //csStr=L"abcdef"
 CString( LPCTSTR lpsz );
 例: CString csStr(_T("abcdef"));
 //csStr=_T("abcdef")
 CString( LPCTSTR lpch,  int nLength );
 例:CString csStr("abcdef", 3);
 //csStr="abc"
 CString( TCHAR ch,  int nRepeat = 1 );
 例:CString csStr(_T('a'), 5);
 //csStr="aaaaa"      

2、

int GetLength( ) const;
      unicode字元集下傳回字元個數,ansi字元集下傳回字元長度,不包含結尾的空字元。
      例:csStr="AB中文12";
      printf("%d",csStr.GetLength());       //UNICODE下為6,ANSI下為8      

3、

int Find( TCHAR ch ) const;
      int Find( LPCTSTR lpszSub ) const;
      int Find( TCHAR ch, int nStart ) const;
      int Find( LPCTSTR pstr, int nStart ) const;
      查找字串,nStart為開始查找的位置。未找到比對時傳回-1,否則傳回字串的開始位置
      例:csStr="abcdef";
              cout<<csStr.Find('b');       //1
              cout<<csStr.Find("de");      //3
              cout<<csStr.Find('b',3);     //-1
              cout<<csStr.Find('b',0);     //1
              cout<<csStr.Find("de",4);    //-1
              cout<<csStr.Find("de",0);    //3
      //當nStart超出對象末尾時,傳回-1。
      //當nStart為負數時,傳回-1。
      int FindOneOf( LPCTSTR lpszCharSet ) const;
      查找lpszCharSet中任意一個字元在CString對象中的比對位置。未找到時傳回-1,否則傳回字串的開始位置
      例:csStr="abcdef";
              cout<<csStr.FindOneOf("cxy");      //2
      int ReverseFind( TCHAR ch ) const;
      從後向前查找第一個比對,找到時傳回下标。沒找到時傳回-1
      例:csStr="abba";
              cout<<csStr.ReverseFind('a');        //3      

4、

CString SpanExcluding( LPCTSTR lpszCharSet ) const;
      傳回與lpszCharSet中任意字元比對的字元之前的子串(找到第一個比對的字元就傳回)
      例:csStr="abcdef";
              cout<<csStr.SpanExcluding("cf");    //ab
      CString SpanIncluding( LPCTSTR lpszCharSet ) const;
      查找與lpszCharSe中任意字元不比對的字元,并傳回不比對字元之前的字串(找到第一個不比對的字元就傳回)
      例:csStr="abcdef";
              cout<<csStr.SpanIncluding("fdcba");    //abcd
      可以利用SpanIncluding這個特性來判斷字元串的合法性,是否是我們要求的字元,比如是否全是數字構成的字元串:
      CString strTarget;
......
if ( strTarget == strTarget.SpanIncluding( _T("0123456789") ) ) 
{
// 字元串由數字構成,符合要求
......
}      

5、

TCHAR GetAt( int nIndex ) const;
      傳回下标為nIndex的字元,與字元串的[]用法相同
      例:csStr="abcdef";
              cout<<csStr.GetAt(2);             //c
      //當nIndex為負數或超出對象末尾時,會發生無法預料的結果。
      void SetAt( int nIndex, TCHAR ch );
      給下标為nIndex的字元重新指派
      例:csStr="abcdef";
              csStr.SetAt(2,'x');
              cout<<csStr;                      //abxdef
      //當nIndex為負數或超出對象末尾時,會發生無法預料的結果。      

6、

CString Left( int nCount ) const;
      從左取字串
      例:csStr="abcdef";
              cout<<csStr.Left(3);          //abc
      //當nCount等于0時,傳回空。
      //當nCount為負數時,傳回空。
      //當nCount大于對象長度時,傳回值與對象相同。
      CString Right( int nCount ) const;
      從右取字串
      例:csStr="abcdef";
              cout<<csStr.Right(3);           //def
      //當nCount等于0時,傳回空。
      //當nCount為負數時,傳回空。
      //當nCount大于對象長度時,傳回值與對象相同。
      CString Mid( int nFirst ) const;
      CString Mid( int nFirst, int nCount ) const;
      從中間開始取字串
      例:csStr="abcdef";
              cout<<csStr.Mid(2);           //cdef
              csStr="abcdef";
              cout<<csStr.Mid(2,3);         //cde
      //當nFirst為0和為負數時,從第一個字元開始取。
      //當nFirst等于對象末尾時,傳回空字串。
      //當nFirst超出對象末尾時,會發生無法預料的結果。
      //當nCount超出對象末尾時,傳回從nFirst開始一直到對象末尾的字串
      //當nCount為0和為負數時,傳回空字串      

7、

void Format( LPCTSTR lpszFormat, ... );
      void Format( UINT nFormatID, ... );
      格式化資料到CString對象,與C語言的sprintf函數用法類似
      例:csStr.Format("%d",13);
              cout<<csStr;                       //13      

8、

void Empty( );
      清空
      例:csStr="abcdef";
              csStr.Empty();
              printf("%d",csStr.GetLength());    //0
      BOOL IsEmpty( ) const;
      測試對象是否為空,為空時傳回零,不為空時傳回非零
      例:csStr="abc";
              cout<<csStr.IsEmpty();         //0;
              csStr.Empty();
              cout<<csStr.IsEmpty();         //1;      

9、

void MakeReverse( );
      颠倒字元串的順序
      例:csStr="ABCDEF中文123456";
              csStr.MakeReverse();
              cout<<csStr;                  //654321文中FEDCBA
      void MakeUpper( );
      将小寫字母轉換為大寫字母
      例:csStr="abcdef中文123456";
              csStr.MakeUpper();
              cout<<csStr;                  //ABCDEF中文123456
      void MakeLower( );
      将大寫字母轉換為小寫字母
      例:csStr="ABCDEF中文123456";
              csStr.MakeLower();
              cout<<csStr;                  //abcdef中文123456      

10、

int Compare( LPCTSTR lpsz ) const;
        區分大小寫比較兩個字元串,相等時傳回0,大于時傳回1,小于時傳回-1
        例:csStr="abcdef中文123456";
                csStr2="ABCDEF中文123456";
                cout<<csStr.CompareNoCase(csStr2);             //0
        int CompareNoCase( LPCTSTR lpsz ) const;
        不區分大小寫比較兩個字元串,相等時傳回0,大于時傳回1,小于時傳回-1
        例:csStr="abcdef中文123456";
        csStr2="ABCDEF中文123456";
        cout<<csStr.CompareNoCase(csStr2);             //-1
        CString對象的比較還可以通過==、!=、<;、>;、<=、>=等重載運算符實作。      

11、

int Delete( int nIndex, int nCount = 1 )
        删除字元,删除從下标nIndex開始的nCount個字元
        例:csStr="ABCDEF";
                csStr.Delete(2,3);
                cout<<csStr;              // ABF
        //當nIndex過大,超出對像所在記憶體區域時,函數沒有任何操作。
        //當nIndex為負數時,從第一個字元開始删除。
        //當nCount過大,導緻删除字元超出對像所在記憶體區域時,會發生無法預料的結果。
        //當nCount為負數時,函數沒有任何操作。

        int Insert( int nIndex, TCHAR ch )
        int Insert( int nIndex, LPCTSTR pstr )
        在下标為nIndex的位置,插入字元或字元串。傳回插入後對象的長度
        例:csStr="abc";
                csStr.Insert(2,'x');
                cout<<csStr;                    //abxc
                csStr="abc";
                csStr.Insert(2,"xyz");
                cout<<csStr;                    //abxyzc
       //當nIndex為負數時,插入在對象開頭
       //當nIndex超出對象末尾時,插入在對象末尾

       int Remove( TCHAR ch );
       移除對象内的指定字元。傳回移除的數目
       例:csStr="aabbaacc";
               csStr.Remove('a');                cout<<csStr;                    //bbcc

        int Replace( TCHAR chOld, TCHAR chNew );
        int Replace( LPCTSTR lpszOld, LPCTSTR lpszNew );
        替換字串
        例:csStr="abcdef";
                csStr.Replace('a','x');
                cout<<csStr;                    //xbcdef
                csStr="abcdef";
                csStr.Replace("abc","xyz");
                cout<<csStr;                    //xyzdef

  12、void TrimLeft( );
          void TrimLeft( TCHAR chTarget );
          void TrimLeft( LPCTSTR lpszTargets );
          從左删除字元,被删的字元與chTarget或lpszTargets中字元比對,一直删到第一個不比對的字元為止
          例:csStr="aaabaacdef";
                  csStr.TrimLeft('a');
                  cout<<csStr;                //baacdef
                  csStr="aaabaacdef";
                  csStr.TrimLeft("ab");
                  cout<<csStr;                //cdef
         //無參數時删除換行、空格、制表符。

         void TrimRight( );
         void TrimRight( TCHAR chTarget );
         void TrimRight( LPCTSTR lpszTargets );
         從右删除字元,被删的字元與chTarget或lpszTargets中字元比對,一直删到第一個不比對的字元為止
         例:csStr="abcdeaafaaa";
         csStr.TrimRight('a');
         cout<<csStr;               //abcdeaaf
         csStr="abcdeaafaaa";
         csStr.TrimRight("fa");
         cout<<csStr;                //abcde
        //無參數時删除換行、空格、制表符。
        void Trim( );
        void Trim( TCHAR chTarget );
        void Trim( LPCTSTR lpszTargets );
        從左和右删除字元,被删的字元與chTarget或lpszTargets中字元比對,一直删到第一個不比對的字元為止
        //無參數時删除換行、空格、制表符。      

13、

LPTSTR GetBuffer( int nMinBufLength );
        擷取内部字元緩沖區.傳回LPTSTR類型指針。參數nMinBufLength指定緩沖區大小,參數為空則為原内部緩沖區大小。
        例:CString str;
               LPTSTR p = str.GetBuffer(100);
               _tcscpy(p, L"abc");
               str.ReleaseBuffer();
               int nLength = str.GetLength();//3
               cout << str;//"abc"
        //使用完GetBuffer後必須使用ReleaseBuffer以更新對象内部資料,CString對象的任 何方法都應在ReleaseBuffer之後調用。與GetBufferSetLength不同的是如果配置設定的空間大于實際儲存的字元串('\0'結尾), ReleaseBuffer會把多餘申請的空間釋放。
       void ReleaseBuffer( int nNewLength = -1 );
       使用GetBuffer後必須使用ReleaseBuffer以更新對象内部資料,CString對象的任 何方法都應在ReleaseBuffer之後調用
       LPTSTR GetBufferSetLength( int nNewLength );
         擷取内部字元緩沖區.傳回LPTSTR類型指針。
    例: CString str;
           LPTSTR p = str.GetBufferSetLength(100);
           _tcscpy(p, L"abc");
           str.ReleaseBuffer();
           int nLength = str.GetLength();//3
           cout << str;//"abc"
    //使用完GetBuffer後不必再調用ReleaseBuffer