有用的 CString 操作函数






2.87/5 (5投票s)
一组用于执行 CString 无法正确处理的任务的函数。

引言
直到最近,我主要使用自己的 string
类,它工作得很好。 但后来我有了更多地遵循标准的冲动,并决定对所有 string
操作使用 CString
,只是它没有我在我的 string
类中经常使用的一些函数。 最初,我决定从 CString
派生自己的类,但很快放弃了这个想法,因为该解决方案远非灵活,尤其是在 CStringT
中有数十个构造函数可用的情况下。 相反,我编写了几个全局函数,这些函数执行了 CString
没有的功能 - 这就是 StringLib.h 的作用。
Using the Code
StringLib
最好用于补充 CString
。 也就是说,您可以在应用程序中像往常一样使用 CString
,并时不时地调用 StringLib
的一些函数以执行特殊任务。 这可以节省您编写琐碎且经常使用的 string
操作代码所需的时间。
那么 StringLib
究竟能做什么呢?
路径管理
-
bool IsRelativePath(const TCHAR* str);
确定传递给它的路径是相对路径还是绝对路径。 网络路径被认为是绝对路径。
-
bool RelativeToAbsolute(CString& str, HMODULE base = 0); bool RelativeToAbsolute(CString& str, const TCHAR* base);
将
string
中包含的路径从相对路径(相对于给定模块或其他文件)转换为绝对路径。 这是一个非常有用的功能,因为您只需一行代码就可以获取应用程序目录中任何文件的完整路径。 -
void TailBackslash(CString& str);
如果末尾还没有反斜杠字符,则向
string
的末尾添加一个反斜杠字符。
分词
-
int GetTokenCount(const TCHAR* str, const TCHAR* delimiters);
确定
string
内的 token 数量。 -
CString GetToken(const TCHAR* str, const TCHAR* delimiters, int index);
从
string
检索具有给定从零开始的索引的 token。 由于操作的性质,效率相当低,请注意。 -
bool TrimRightToken(CString& str, const TCHAR* delimiters);
删除给定
string
中最右边的 token。 -
void Explode(const TCHAR* str, const TCHAR* delimiters, CStringArray& arr);
将给定的
string
转换为 token 数组。 -
CString Implode(TCHAR delimiter, const CStringArray& arr);
将给定的 token 数组转换为
string
。
整数
-
int ToInt(const TCHAR* str);
从
string
转换为integer
。 看起来比这个丑陋的_ttoi
好得多。 -
CString ToCString(int num);
从
integer
转换为string
。 比Format
短得多。
关注点
某些函数中的代码可能看起来效率较低。 这是因为它是。 但是,这种低效率的原因是,由于它们要解决的问题的性质,这些函数几乎无法改进很多。
但是,就像许多其他开发人员一样,我相信代码重用和较低的维护成本总是值得使用稍微低效的代码。 这正是这些函数所做的 - 通过让您专注于手头的任务而不是 string
分词,从而帮助您使代码更具可读性。 难怪这需要付出代价。
免责声明
当然,您可以随意使用此代码,但请自担风险,尽管使用它似乎没有任何直接风险。
祝您编码愉快!
历史
- 2007年1月31日:初始发布