最近在学VC,CAD二次开发,完成一些小任务。
CString与CStringArray互相转化是很重要的一个知识点,
在C#中这个转化是内置的函数Split('');
C++好麻烦。
大气象
//
类似C#的Split('_');DivStr(str,strArr,_T("_"));
UINT DivStr(CString str,CStringArray & Arr, char ch)
{
int nFindposi = str.Find(ch);
if ( nFindposi < 0 )
return 0 ;
while ( nFindposi > 0 )
{
Arr.Add(str.Left(nFindposi) );
str = str.Right( str.GetLength() - nFindposi - 1 );
str.TrimLeft(ch); // warning
nFindposi = str.Find(ch);
}
if ( ! str.IsEmpty() )
Arr.Add(str);
return Arr.GetSize();
}
UINT DivStr(CString str,CStringArray & Arr,CString strDiv)
{
int nFindposi = str.Find(strDiv);
if ( nFindposi < 0 )
return 0 ;
while ( nFindposi > 0 )
{
Arr.Add(str.Left(nFindposi) );
str = str.Right( str.GetLength() - nFindposi - 1 );
str.TrimLeft(strDiv); // warning
nFindposi = str.Find(strDiv);
}
if ( ! str.IsEmpty() )
Arr.Add(str);
return Arr.GetSize();
}
void CCStringArrayDlg::OnBnClickedButtonOk()
{
// TODO: 在此添加控件通知处理程序代码
CString str = m_str; // _T("i am a student");
CStringArray strArr;
// CString转CStringArray
if ( DivStr(str,strArr,_T( " " )) <= 0 )
{
AfxMessageBox( _T( " 数组为空! " ));
return ;
}
// CStringArray转CString
str = _T( "" );
int index = strArr.GetSize();
for ( int i = 0 ;i < index;i ++ )
{
str += strArr[i] + _T( " _ " );
}
m_str = str.TrimRight( ' _ ' );
UpdateData( false );
}
UINT DivStr(CString str,CStringArray & Arr, char ch)
{
int nFindposi = str.Find(ch);
if ( nFindposi < 0 )
return 0 ;
while ( nFindposi > 0 )
{
Arr.Add(str.Left(nFindposi) );
str = str.Right( str.GetLength() - nFindposi - 1 );
str.TrimLeft(ch); // warning
nFindposi = str.Find(ch);
}
if ( ! str.IsEmpty() )
Arr.Add(str);
return Arr.GetSize();
}
UINT DivStr(CString str,CStringArray & Arr,CString strDiv)
{
int nFindposi = str.Find(strDiv);
if ( nFindposi < 0 )
return 0 ;
while ( nFindposi > 0 )
{
Arr.Add(str.Left(nFindposi) );
str = str.Right( str.GetLength() - nFindposi - 1 );
str.TrimLeft(strDiv); // warning
nFindposi = str.Find(strDiv);
}
if ( ! str.IsEmpty() )
Arr.Add(str);
return Arr.GetSize();
}
void CCStringArrayDlg::OnBnClickedButtonOk()
{
// TODO: 在此添加控件通知处理程序代码
CString str = m_str; // _T("i am a student");
CStringArray strArr;
// CString转CStringArray
if ( DivStr(str,strArr,_T( " " )) <= 0 )
{
AfxMessageBox( _T( " 数组为空! " ));
return ;
}
// CStringArray转CString
str = _T( "" );
int index = strArr.GetSize();
for ( int i = 0 ;i < index;i ++ )
{
str += strArr[i] + _T( " _ " );
}
m_str = str.TrimRight( ' _ ' );
UpdateData( false );
}
m_str是Static Text对应的变量。
1.Static Text控件默认ID是IDC_STATIC
必须修改为其他才可以为其添加变量。
2.在构造函数是初始化一些变量,比如Static Text的Caption
CCStringArrayDlg::CCStringArrayDlg(CWnd* pParent /*=NULL*/)
: CDialog(CCStringArrayDlg::IDD, pParent)
, m_str(_T("i am a student"))
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
也可以在
BOOL CCStringArrayDlg::OnInitDialog(){}中初始化。
***VC的界面与数据是分开存储的。
不能像C#的开发那样,在开发阶段设置Text默认值,我晕。
3.c++项目文件好大啊,就这个简单玩意就20M,我晕。
本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/greatverve/archive/2010/11/08/cpp-cstring-cstringarray.html,如需转载请自行联系原作者