65.9K
CodeProject 正在变化。 阅读更多。
Home

有用的 CString 操作函数

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.87/5 (5投票s)

2007 年 2 月 1 日

CPOL

2分钟阅读

viewsIcon

45103

downloadIcon

272

一组用于执行 CString 无法正确处理的任务的函数。

Sample image

引言

直到最近,我主要使用自己的 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日:初始发布
© . All rights reserved.