从语言基本字符串用法整理

1、 sizeof strlen wcslen tcslen 比较

sizeof strlen wcslen tcslen 都是取得字符串长度。

sizeof :取得字符串的字节长度,包含 '/0'。

strlen:取得多字节字符串中字符长度,不包含 '/0'。

wcslen:取得宽字节字符串中字符长度,不包含 '/0'。

tcslen:取得宽字节/多字节字符串中字符长度,不包含 '/0'。

2、memset & wmemset ;  memcpy & memcpy_s & wmemcpy

	  void *memset(void *dest,  int c, size_t count );
	wchar_t *wmemset( wchar_t *dest, wchar_t c, size_t count);
	errno_t memcpy_s( void *dest, size_t numberOfElements, const void *src, size_t count );
	errno_t wmemcpy_s(wchar_t *dest, size_t numberOfElements,const wchar_t *src, size_t count);
memcpy()函数即将禁用

3、strcmp,strcpy, strcpy_s ; strcpy_s & strcpy

             处理的都是C格式的字串(strcpy,strcpy_s)
1)前者区分大小写,后者不区分大小写
        2)前者返回-1,0,1,后者返回字串实际差值,即整形数:负数,零,正数
        char *strcpy(char *dest,char *src);
        errno_t strcpy_s( char *strDestination, size_t numberOfElements, const char *strSource );






<think>好的,我现在需要处理用户关于C++字符串使用方法的查询。首先,我得回忆一下用户提供的引用内容,确保回答准确。用户引用了三个来源,分别是关于字符串常量、字符串变量、常用操作以及宽字符串处理。 第一步,我应该整理C++中字符串基本类型,即C风格字符串和std::string,可能还要提到宽字符的std::wstring,因为引用[3]提到了宽字符串的处理。需要明确说明两种字符串类型的使用场景和区别。 接下来,用户需要示例。根据引用[1],字符串常量可以直接用双引号,比如cout输出。而字符串变量需要使用std::string,需要包含头文件<string>。这里要注意用户提供的代码示例是否正确,比如在C++中正确包含头文件的方式,以及使用命名空间std的情况。 然后,常用操作部分,引用[2]提到获取字符串长度、拼接、查找子串、截取子串等。需要逐一解释每个操作,并给出代码示例。例如,获取长度用size()或length(),拼接用+操作符,查找用find(),截取用substr()。 宽字符串的处理在引用[3]中,用户可能想知道如何分割宽字符串,比如使用wstring和相应的处理函数。需要提供一个示例,比如使用自定义的WStringSplit函数来分割宽字符串,并解释每个步骤。 另外,用户的问题还涉及系统级指令,比如数学公式的格式,但这里用户的问题是关于C++字符串的,可能不需要数学公式。不过需要确保所有代码块正确使用语法高亮,并且符合用户的要求,比如行内代码用$...$?不,用户提到的数学表达式需要用$...$,但代码块应该用三个反引号包裹。之前的示例中有代码块使用python,这里需要改成C++的代码块。 还需要生成相关问题,根据用户提供的引用内容,可能的问题包括字符串常量与变量的区别、常用操作的函数、宽字符串处理注意事项、字符串与字符数组的区别等。 现在需要检查是否有遗漏的信息。例如,引用[1]提到了字符串常量和变量,引用[2]涉及操作,引用[3]是宽字符串分割。在回答中需要覆盖这些点,并正确引用来源。例如,在讲字符串常量时引用[^1],在获取长度时引用[^2],处理宽字符串时引用[^3]。 还需要注意用户要求回答结构清晰,分步骤说明。因此,可以将内容分为字符串类型、常用操作、宽字符串处理等部分,每个部分下给出示例代码,并引用对应的来源。 最后,确保所有代码示例正确无误,比如正确的头文件包含、命名空间的使用,以及函数调用是否正确。例如,在分割宽字符串的示例中,可能需要实现WStringSplit函数,或者指出该函数来自用户提供的引用[3]中的示例。</think>### C++字符串使用方法及示例 #### 一、字符串类型与基础用法 1. **字符串常量** 用双引号包裹,可直接用于输出或赋值: ```cpp #include <iostream> using namespace std; int main() { cout << "abc" << "是一个字符串常量" << endl; // 输出:abc是一个字符串常量 } ``` 2. **字符串变量** 使用`std::string`(需包含头文件`<string>`): ```cpp #include <string> using namespace std; int main() { string str = "Hello World"; // 定义字符串变量 } ``` --- #### 二、常用字符串操作 1. **获取字符串长度** 使用`size()`或`length()`方法: ```cpp string str = "C++"; int len = str.size(); // 结果为3 ``` 2. **字符串拼接** 使用`+`操作符或`append()`方法: ```cpp string s1 = "Hello", s2 = "World"; string s3 = s1 + " " + s2; // 结果为"Hello World" ``` 3. **查找子字符串** 使用`find()`方法: ```cpp string str = "apple banana"; size_t pos = str.find("banana"); // 返回子串起始位置6 ``` 4. **截取子字符串** 使用`substr(start, length)`: ```cpp string str = "123456"; string sub = str.substr(2, 3); // 结果为"345" ``` --- #### 三、宽字符串处理(`std::wstring`) 宽字符串用于多语言字符(如中文、日文): ```cpp #include <vector> #include <string> using namespace std; void WStringSplit(const wstring& str, vector<wstring>& tokens, const wstring& delimiter) { size_t pos = 0, prev = 0; while ((pos = str.find(delimiter, prev)) != wstring::npos) { tokens.push_back(str.substr(prev, pos - prev)); prev = pos + delimiter.length(); } tokens.push_back(str.substr(prev)); } int main() { wstring urlstr = L"name=张三&age=20"; vector<wstring> tokens; WStringSplit(urlstr, tokens, L"&"); // 分割结果为["name=张三", "age=20"] } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值