上次说到我的MFC作业:
MFC计算器最简单版本(我的计算器1.1,和同学交流的结果)
MFC简单计算器(我的实验报告1.2版本)
实验内容:
可以在多个题目中选择一个:
1、编写一本通信录
2、模拟简单计算器√
3、简单的管理系统的设计:如人事、工资、学生成绩等。(要求部分功能实现)。
4、迷宫生成器
1.对实验结果进行分析
虽然我设计的MFC计算器,这是苦熬的2天3夜后结果,并没有很多花哨的功能,但把所有基本的功能都实现了,从实验的结果来看,实验结果与预期达到一致,实现了一些±*/这些功能,并且都是使用了极为简洁的代码,运用了CStringArray实现了多次计算,并且还注重了程序的完美。
按顺序添加控键代码,方便阅读和使用。这篇价值还是有的,觉得不错给个赞。但是,
其中是由bug的,但没时间和精力搞了,只能留给路过的大佬了,或者只能之后的自己搞了。就是kf 开方,我虽然实现了计算,但不能9kf+1或1+9kf的运算。要是大佬知道教一下小弟。
QQ号:1456084073
2、完成编写相关实验代码
①.整体框架的设计
1)首先,这个就是运行的可视化效果图
2)功能比较多,设置了2个编辑框,一个存放时间(打开软件的时间),一个是显示计算过程和结果。数据和运算符都是单行显示。最难的是控键的空行设置和传递值。
2)功能比较多,设置了2个编辑框,一个存放时间(打开软件的时间),一个是显示计算过程和结果。数据和运算符都是单行显示。最难的是控键的空行设置和传递值。
②.编写代码前的准备工作
在右边的编辑框添加变量,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();
}
特效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);
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);
}
void CMFCApplication11Dlg::OnBnClickedButtonononcancel()
{
if (MessageBox(_T("确认退出"), _T(""), MB_YESNO | MB_ICONQUESTION) == IDYES) {
this->SendMessage(WM_CLOSE);
}
}
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
CStringArray类
CStringArray类支持CString对象数组,其类似于CObArray类,你可以参考关于CObArray的参考文件来获取CStringArray成员函数的详细说明。如果在说明中看到某一函数的返回值是一个指向CObject对象的指针,则可以用一个CString来代替它。
(函数查找来自https://www.cnblogs.com/milanleon/p/5623074.html)