C++ CString与CStringArray互相转化

简介:

最近在学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 );
}
复制代码

 

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,如需转载请自行联系原作者



相关文章
C++学习——CString,char * ,string的相互转换
C++学习——CString,char * ,string的相互转换
331 0
|
存储 算法 C++
C++中的字符串操作&lt;cstring&gt;和&lt;string&gt;的区别
目录 目录 参考资料 字符串 cstring和string的区别在哪 string类的实现 注意不要盲目相信以下内容! 不要盲目相信以下内容! 不要盲目相信以下内容! (重要的事情说三遍),虽然以下内容也经过了我的验证,但是我的验证可能有错误的地方,欢迎大家留言告知。
1443 0
|
C++
C/C++的一点技巧:如何在控制台工程中使用CString类
在C/C++的开发工作中,我们经常会新建一个控制台工程来测试某个与界面无关的功能。在处理与字符串相关的内容时,我们会遇到一个很麻烦的问题,即控制台程序不支持使用CString类,而这个类由于对字符串处理功能相当完善,因此用途还是非常广泛的。
1227 0
|
C++ 程序员 算法
C 风格字符串,C++string类,MFC,CString类的区别。
字符串,顾名思义是由字符组成的字符串,在标准C,标准C++,MFC中 字符串这一功能的实现是不相同的,C++完全兼容了C。 1.  标准C中的字符串    在标准C中没有string这样的数据类型,C中的字符串是有char类型的字符数组或者char类型的字符指针来实现的。
1524 0
|
7月前
|
编译器 C++ 开发者
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。
|
3月前
|
人工智能 机器人 编译器
c++模板初阶----函数模板与类模板
class 类模板名private://类内成员声明class Apublic:A(T val):a(val){}private:T a;return 0;运行结果:注意:类模板中的成员函数若是放在类外定义时,需要加模板参数列表。return 0;
92 0
|
3月前
|
存储 编译器 程序员
c++的类(附含explicit关键字,友元,内部类)
本文介绍了C++中类的核心概念与用法,涵盖封装、继承、多态三大特性。重点讲解了类的定义(`class`与`struct`)、访问限定符(`private`、`public`、`protected`)、类的作用域及成员函数的声明与定义分离。同时深入探讨了类的大小计算、`this`指针、默认成员函数(构造函数、析构函数、拷贝构造、赋值重载)以及运算符重载等内容。 文章还详细分析了`explicit`关键字的作用、静态成员(变量与函数)、友元(友元函数与友元类)的概念及其使用场景,并简要介绍了内部类的特性。
169 0
|
5月前
|
编译器 C++ 容器
【c++11】c++11新特性(上)(列表初始化、右值引用和移动语义、类的新默认成员函数、lambda表达式)
C++11为C++带来了革命性变化,引入了列表初始化、右值引用、移动语义、类的新默认成员函数和lambda表达式等特性。列表初始化统一了对象初始化方式,initializer_list简化了容器多元素初始化;右值引用和移动语义优化了资源管理,减少拷贝开销;类新增移动构造和移动赋值函数提升性能;lambda表达式提供匿名函数对象,增强代码简洁性和灵活性。这些特性共同推动了现代C++编程的发展,提升了开发效率与程序性能。
179 12
|
6月前
|
设计模式 安全 C++
【C++进阶】特殊类设计 && 单例模式
通过对特殊类设计和单例模式的深入探讨,我们可以更好地设计和实现复杂的C++程序。特殊类设计提高了代码的安全性和可维护性,而单例模式则确保类的唯一实例性和全局访问性。理解并掌握这些高级设计技巧,对于提升C++编程水平至关重要。
129 16