c++中strsub()的用法

本文详细介绍了C++标准库中basic_string类的成员函数substr的使用方法。通过实例演示了如何从指定位置开始复制最多指定数量的字符到新的字符串对象中。同时提供了默认参数情况下复制整个原始字符串的例子。

首先声明我的确时一个新手,一个substr()函数让我的一个项目功能出现了问题。

先给一下msdn上的内容要求吧。

其功能是 Copies a substring of at most some number of characters from a string beginning from a specified position.

内部定义的函数是:

basic_string substr(
   size_type _Off = 0,
   size_type _Count = npos
) const;


 

解释一下参数吧,这里有两个参数,第一个参数是要截取的字符串的起始位置,后一个参数是要截取字符串的长度。

返回值:Return Value

A substring object that is a copy of elements of the string operand beginning at the position specified by the first argument.

例子:

// basic_string_substr.cpp
// compile with: /EHsc
#include <string>
#include <iostream>

int main( ) 
{
   using namespace std;

   string  str1 ("Heterological paradoxes are persistent.");
   cout << "The original string str1 is: \n " << str1
        << endl << endl;

   basic_string <char> str2 = str1.substr ( 6 , 7 );
   cout << "The substring str1 copied is: " << str2
        << endl << endl;
   
   basic_string <char> str3 = str1.substr (  );
   cout << "The default substring str3 is: \n " << str3
        <<  "\n which is the entire original string." << endl;
}


 

输出结果是

The original string str1 is:  Heterological paradoxes are persistent.
The substring str1 copied is: logicalThe default substring str3 is:  Heterological paradoxes are persistent. 
which is the entire original string.
<think>好的,我现在要解决用户的问题:在MFC中检查CString是否包含另一个CString,可能涉及类型兼容性或用法问题。首先,我需要确认用户的问题具体是什么。用户可能是在处理字符串操作时,想知道如何判断一个CString对象是否包含另一个子字符串,或者是否存在类型转换的问题。 根据用户提供的引用内容,特别是引用[1]和引用[3],CString是MFC中的类,而string是标准C++的类。两者在转换和使用上有区别,但用户的问题集中在CString之间的操作,所以可能不需要跨类型转换,而是同一类型下的方法使用。 接下来,我需要回忆CString类的成员函数。CString类有Find方法,可以用来查找子字符串。如果找到,返回子字符串的起始索引;否则返回-1。这可能就是用户需要的检查包含关系的方法。 然后,考虑类型兼容性。用户提到“CTRING”可能是拼写错误,实际应为CString。需要确认是否存在类似的类名混淆,但根据引用资料,MFC中主要使用CString,没有CTRING这个类,所以可能是打字错误。 接下来,检查示例代码的正确性。使用CString的Find方法,并判断返回值是否大于等于0。同时,考虑大小写敏感的问题,是否需要使用MakeLower或MakeUpper预处理,或者使用FindNoCase方法。 还需要确认用户是否需要处理Unicode和多字节字符集的情况,但CString在MFC中自动处理这些,所以代码示例应该通用。 最后,生成相关问题,涵盖类型转换、性能比较、替代方法等,帮助用户进一步理解。</think>关于MFC中CString类型的包含判断及兼容性问题,以下是关键点解析: **1. 判断包含关系的正确方法** 在MFC中判断CString是否包含另一个CString,应使用Find()成员函数: ```cpp CString strMain = _T("Hello MFC CString"); CString strSub = _T("CString"); if(strMain.Find(strSub) >= 0) { // 包含目标子串 } else { // 不包含目标子串 } ``` 此方法支持完整的字符串匹配检测,返回值为子串起始位置索引(未找到返回-1)[^4] **2. 类型兼容性说明** - CString是MFC专属类,与std::string无继承关系[^1][^3] - CString与char*可自动转换(通过operator LPCSTR()运算符重载)[^1] - CString之间可直接操作,无需类型转换[^4] **3. 常见误区排查** - **拼写检查**:MFC中不存在CTRING类型,应为CString的拼写错误 - **编码兼容**:Debug模式下CString有额外调试信息,但Release模式自动优化 - **空值处理**:空CString对象不会引发空指针异常,其内部维护固定初始化地址[^4] **4. 扩展方法对比** | 方法 | 特点 | 大小写敏感 | |--------------|-------------------------|-----------| | Find() | 精确匹配 | 是 | | FindNoCase() | 不区分大小写匹配 | 否 | | Compare() | 全等比较(类似==运算符) | 是 | **5. 最佳实践建议** ```cpp // 安全检测模板 BOOL ContainsSubstring(const CString& mainStr, const CString& subStr) { return (mainStr.GetLength() >= subStr.GetLength()) && (mainStr.Find(subStr) != -1); } ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值