字符串就是内存中存储的一连串字符,C++和C玉缘本身都不支持字符串这种数据类型,但是C语言支持字符数组,简介支持了字符串;而C++标准库带有string类,也简介支持了字符串。C++是C语言的超集,因此,可以认为C++间接支持两种字符串:C风格的字符串和string字符串。由于历史原因,在实际编程时,多数程序员喜欢使用C风格的字符串。

    字符集指的是字符串中每个字符在内存中存储时的编码格式,Windows操作系统支持三种编码格式:单字节字符集、多字节字符集和双字节字符集。

    单字节字符集(简称SBCS)中每个字符用1字节表示,用于表示英文字符。

    多字节字符集(简称MBCS)一般用于亚洲语系。英文字符用1个字节表示,中文用2个字节表示。

    双字节字符集(简称DBCS)中的每一个字符都用2字节表示,UNICODE是典型的双字节字符集。每个字符无论中英文都用2个字节存储。


    C/C++规定,C风格的字符串就是以字符‘ \0 ’结尾的字符数组。字符‘ \0 ’的ASCII码是数字0,因此也可以将C风格的字符串理解为以数字0结尾的字符数组。在代码中,字符串常量是用双引号括起来的一串字符。


    C风格的字符串定义和存储有以下两种形式:

1、使用字符型指针:

eg1:char *str = "你好 C++"; // 多字节字符集

eg2:wchar_t * str2 = L"吃饭了吗?"; // 双字节字符集,前缀加字母L

2、使用字符数组:

eg1:char sName[] = "郭靖"; // 不使用{},多字节字符集

eg2:char sCity[] = {"北京"}; // 使用{},多字节字符集

eg3:wchar_t sAddr [] = {L"黄土高原"}; // 双字节字符集,前缀加字母L

注:上述代码中,sName、sCity和sAddr三个字符串的末尾都有一个数字0,这回占用一个元素的位置,因此在用数组定义和存储字符串时,一定要保证数组的元素个数够用。也可以像上面那样,不指定数组个数,由编译器自动计算。


    常用的字符串操作函数:

字符串复制函数:strcpy、wcscpy

字符串连接函数:strcat、wcscat

字符串查找函数:strstr、wcsstr

以上函数中,以w开头的是针对双字节字符集的。另外,在使用以上函数时,需要包含string.h头文件。


示例:


#include <IOSTREAM>
#include <STRING.H>  // 包含字符串函数的头文件

using namespace std;


int main (int argc, char* argv[])
{
	char str[100] = {"我们都知道"};
	char sName[20] = {0};
	char sSay[20] = {0};

	strcpy(sName, "王立");  // 将字符串“王立”复制到sName中
	cout << "sName的内容是:" << sName << endl;

	strcat(sSay, "人很好");  // 将字符串“人很好”连接到sSay
	cout << "sSay的内容是:" << sSay << endl;

	strcat(str, sName);  // 将字符串sName连接到str
	cout << "str的内容是:" << str << endl;

	// 在字符串sName中查找str
	// NULL是系统内置的常量,置为0,多用于初始化空指针
	if (strstr(str, sName) != NULL)
	{
		cout << "没错,说的就是" << sName << endl;
	}

	return 0;
}



运行结果:


sName的内容是:王立
sSay的内容是:人很好
str的内容是:我们都知道王立
没错,说的就是王立