此篇主要总结了Windows下MFC编程字符串相关的一些知识,如CString, CStringList等的使用. 纯粹为了自己平时查找方便;相关内容均来自网络,链接附在文末.侵删.
CString MFC下最好用的字符串类应该就是CString了.CString是MFC中的一个类,包含了许多好用的操作如 格式化,查找,计算长度等.
要使用CString,需要在工程引用头文件:#include <afx.h>
,一般放到stdafx.h
预编译头中. 另外需要在项目属性中选择"在共享DLL中使用MFC".
以前有项目在VC6.0,后来迁移到VS2013,刚开始关于CString大量报错,发现是不同平台字符 编码的问题,从网上下载Multibyte MFC Library for Visual Studio 2013
,安装之后,选择 多字节编码而非Unicode,即没有编码问题,CString也可以自由使用.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 CString s; CString s ("hello" ) ;CString s = "hello" ; char c[] = "hello" ;CString s = "" ; s.Format("%s" , c); CString s = "hello" ; printf ("%d" , s.GetLength()); s.MakeReverse(); s.MakeUpper(); s.MakeLower(); s.Insert(2 , "a" ); s.Delete(3 , 2 ); s.Replace("ll" , "yy" ); s.Remove('l' ); s.TrimLeft(); s.TrimRight("a" ); s.Empty(); s.IsEmpty(); s.Find('e' ); s.Find('ll'); // 2 s.Find('e' , 1 ); s.Find('a' ); s.ReverseFind('e' ); s.Format("%d" , 2 ); s.GetAt(2 ); s.SetAt(2 , 'h' ); s.Left(2 ); s.Right(2 ); s.Mid(2 , 2 ); s.Mid(2 );
CString与其他类型互转 CString常用于MFC,安全性高,但可移植性差 string常用于STL char * 常用于API的输入参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 CString s = "hello" ; char *p = (LPSTR)(LPCTSTR)s;char p[] = "world" ;s.Format("%s" , p); CString s; string str = "hello" ;s.Format("%s" , str.c_str()); CString s = "hello" ; string str (s.GetBuffer()) ; CString.ReleaseBuffer(); char p[] = "hello" ;string str (p) ;const char *c = str.c_str();int i = atoi(s); int i = _ttoi(s);CString.Format("%d" , i); char a[100 ];CString s ("abc" ) ;strncpy (a, (LPCTSTR)s, sizeof (a));
CStringList CStringList是MFC中定义的用于存储CString字符串的链表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 CStringList str_list; str_list.AddHead("123" ); str_list.AddTail("123" ); str_list.InsertBefor(POSITION pos, "123" ); str_list.InsertAfter(POSITION pos, "123" ); str_list.RemoveHead(); str_list.RemoveTail(); str_list.RemoveAll(); str_list.GetHead(); str_list.GetTail(); str_list.GetAt(POSITION pos); str_list.SetAt(POSITION pos); str_list.RemoveAt(POSITION pos); str_list.GetHeadPosition(); str_list.GetTailPosition(); str_list.GetNext(POSITION pos); str_list.GetPrev(POSITION pos); POSITION pos = str_list.Find("123" ); POSITION pos = str_list.FindIndex(int i); str_list.GetCount(); str_list.IsEmpty(); POSITION pos; pos = str_list.GetHeadPosition(); while (pos != NULL ){ CString s = str_list.GetNext(pos); printf ("%s" , s); }
附录 1 如何解决VC6迁移到VS2013时出现的error MSB8031 2 VS2008下非MFC工程使用CString类库 3 CString 成员函数用法大全 4 CString转换为LPCSTR方法补充 5 CString Format函数 VS2013 6 CString转char *,strings 7 C语言中string函数详解 8 CSTRINGLIST用法 9 CString,string,char *之间的转换 10 MFC CString 和int相互转化
感谢网上的朋友!
一个小问题 写这篇总结的时候,最后附录有十个链接,我在本地localhost测试,这十个链接只能显示六个, 而且每次刷新出来的页面还都不一样,看网页代码最后部分是乱码,改改markdown中的[]与() 之间加了空格,偶尔会正常出来十个链接,再刷新又没有了,最后deploy到github又显示正常. 暂时没有找到原因,先记下来问题,之后再处理.