关于字符串的相关处理,目前自己只是接触到了 在C语言的字符串处理 和 在C++ 中string字符串处理。
第一种:在C语言的字符串处理
通常需要自己清楚需要操作的字符串 指针或者地址。具体的应用中的步骤一般是: 手动开辟内存、初始化、赋值,(截取,复制...), 手动释放内存。一般和内存、指针打交道比较多。容易发生错误。
C语言的字符串处理的功能函数非常多
#include<string.h> //这个头文件几乎就包含了常用的一些C语言字符操作的功能函数
第二种:在C++使用string字符串操作
使用string 可以避开大多数的内存操作,string是一个类。里面含有很多字符串处理的成员函数,使用时:
#include<string>
using namespace std;
在一些情况下,需要传递的参数类型会有限制(如:文件路径及文件操作时),从string到C语言风格的字符串char*转换时,需要用到的是 string.c_str()这个函数。
第三种 :unicode环境下的字符串和ansi字符串
有时在网上查了一个功能函数,但在填入自己的字符参数时总是提示变量类型不对。这是把光标移动到这个函数头上时都会发现它们都会被 #define ‘’A‘’ "B".由于现在的编程环境默认都是unicode,使用的一些函数都会被替换成unicode版本下的形式,所以会经常遇见填入的字符串类型不符合
//ansi常用: char char* strlen() strcat()
//改变使用的变量类型习惯
//unicode常用:wchar_t wchar_t* wcslen() wcscat()
还有一种类型字符,以T开头,如 :TCHAR。这种类型的变量会根据你所处的环境来转换成相应的类型:
TCHAR变量:
ANSI环境下 被翻译成 CHAR
UNICODE下 被翻译成 wchar_t
_tcslen函数
ANSI环境下 被翻译成 strlen
UNICODE下 被翻译成 wcslen
==================常用的两个字符串转换功能函数:===========
#include<string>
#include<windows.h>
#include<vector>
inline static std::string UnicodeToUtf8(const wchar_t* buf)
{
int len = ::WideCharToMultiByte(CP_UTF8, 0, buf, -1, NULL, 0, NULL, NULL);
if (len == 0) return "";
std::vector<char> utf8(len);
::WideCharToMultiByte(CP_UTF8, 0, buf, -1, &utf8[0], len, NULL, NULL);
return &utf8[0];
}
inline static std::wstring AnsiToUnicode(const char* buf)
{
int len = ::MultiByteToWideChar(CP_ACP, 0, buf, -1, NULL, 0);
if (len == 0) return L"";
std::vector<wchar_t> unicode(len);
::MultiByteToWideChar(CP_ACP, 0, buf, -1, &unicode[0], len);
return &unicode[0];
}