C ++字符串



C ++提供了三种在程序中创建和使用字符串的基本方法:

  1. 使用char元素数组
  2. 运用 string
  3. 运用 wchar_t 用于宽字符

字符数组

字符串是字符序列。 char 数据类型用于表示C ++中的单个字符。 因此,如果要在程序中使用字符串,则可以使用字符数组。 使用char数组对字符串的声明和定义类似于任何其他数据类型的数组的声明和定义:

//define an array of chars with 10 elements
char msg[10] = { 'M', 'E', 'S', 'S', 'A', 'G', 'E', '\0' };

任何字符串都以终止的空字符'\ 0'结尾。 以这种方式进行的数组定义应包括空字符'\ 0'作为最后一个元素。 在上述情况下,数组的容量为10,但我们仅使用了8。 数组的其余两个字符将不会被定义。

声明和定义动态长度字符数组的另一种方法,如下所示:

char msg2[] = { 'M', 'E', 'S', 'S', 'A', 'G', 'E', '\0' };

在上述情况下,分配的内存量将与存储字符序列所需的内存完全相同。

初始化字符数组的最简单方法是在双引号中使用字符串文字,如下所示:

char msg3[] = "Message";

您可以使用以下函数对char数组执行一些基本操作 CString的 库,例如:

将一个字符串复制到另一个

strcpy_s(destination, source)

下面是使用的演示 strcpy_s
char msg[10] = { 'M', 'E', 'S', 'S', 'A', 'G', 'E', '\0' };
char dest[20];
strcpy_s(dest, msg);
cout << "String copied from msg = " << dest << endl;

上面示例的输出如下所示

从msg复制的字符串= MESSAGE

将一个字符串连接到另一个字符串

strcat_s(string1, string2)

将string2附加到string1的末尾
//declare 2 messages
char string1[20] = "Good";
char string2[] = " Morning";
//concatenate strings
strcat_s(string1, string2);
cout << string1 << endl;

上面程序的输出os将是:

早上好

请注意: 您必须在string1中有足够的可用空间才能将其与string2连接。

获取字符串的长度

strlen(string)

cout << "Length of the string 2 is " << strlen(string2) << endl;

以上代码的输出将是

字符串2的长度是8

字符串:“早晨”以7个字符存储,而8个字符th 字符为空字符–'\ 0'

比较两个字符串

strcmp(string1, string2)

该函数将返回 0,如果字符串相等; 值,如果string1是 比string2和 积极 如果string1为,则为值 更大的 比string2。
//declare two strings
char str1[100];
char str2[100];
//get user input of strings:
cout << "Please enter the first string\n";
cin >> str1;
cout << "Please enter the second string\n";
cin >> str2;
//compare strings
int result = strcmp(str1, str2);
if (result == 0)
{
	//strings are equals
	cout << str1 << " is equal to " << str2 << endl;
}
else
{
	if (result > 0)//str1 is greater
		cout << str1 << " is greater than " << str2 << endl;
	else//str2 is greater
		cout << str1 << " is less than " << str2 << endl;
}

下面是上面程序的输出


请输入第一个字符串
ABC
请输入第二个字符串
ABD
abc小于abd

链表 按字典顺序(字母顺序)比较字符串。 字符串的“小于”表示“猫”小于“狗”,因为“猫”按字母顺序排在“狗”之前。

弦类

通过使用标准C ++库提供的类来表示字符串的另一种方法。 此类命名为 string 它具有比C ++中的char数组更多的功能。 在程序中使用“字符串”类可为您提供更多功能。 要在程序中使用字符串,必须添加以下include语句:

#include <string>

包含此头文件后,您将可以在程序中使用字符串对象。 以下是声明和定义字符串的示例:
string s1 = "Have a";
string s2 = " nice day";

与工作 绳子 上课很容易。

连接字符串

要连接到字符串,请使用加号:

string s3 = s1 + s2;
cout << s3 << endl;

下面是上面代码的输出

有一个很好的一天

字符串长度

要获取字符串的长度,例如“ s3”,可以使用以下函数

s3.length()

获取字符串长度的示例
cout << "Length of s3 is " << s3.length() << endl;

下面是上面代码的输出

s3的长度是15

将一个字符串复制到另一个字符串

要将一个字符串复制到另一个字符串,只需使用赋值运算符

string s4 = s2;
cout << s4 << endl;

下面是上面的输出os代码

美好的一天

将字符串转换为常量字符数组

有时将字符串对象转换为常量char数组很有用。 您可以使用 c_str() 功能如下图

const char* cstr = s3.c_str();

检查字符串是否为空

您可以使用 empty() 字符串的功能,以确定字符串是否为空。 如果字符串为空,则执行 空的() 将返回 true 除此以外 false

下面的代码显示了如何使用 empty()

if (s4.empty())
	cout << "s4 is empty" << endl;
else
	cout << s4 << endl;

字符串类为程序员提供了许多操作字符串的功能,但是我们现在仅讨论基本内容。 我们将在下一个主题中介绍有关字符串类的更多信息。

宽字符wchar_t

宽字 wchar_t 是一种数据类型,其大小大于简单字符数据类型。 此数据类型占用“ 2或4”个字节。 此类型提供使用扩展字符集表示字符串的功能。 通常,当使用国际语言(例如中文,日语)时,将使用wchar_t数据类型。 C ++提供了内置的数据类型来表示 wchar_t 宽字符。

宽字符变量的声明可以通过以下方式进行:

wchar_t wideString;

要使用宽字符数组,必须声明wchar_t数组,如下所示:
wchar_t wideString[100];

跟...共事 wchar_t 类型,您必须包括 字符 程序中的库,如下所示:
#include <wchar.h>

Wchar库提供了用于处理宽字符的不同函数和常量。 中有几个常数 字符 图书馆:
  • NULL –表示空指针常量。
  • WCHAR_MAX –代表whcar_t的最大值
  • WCHAR_MIN –表示wchar_t的最小值。
  • WEOF –用于指示文件结尾的常量。

要将值分配给宽字符串,您必须使用 swprintf功能:

int swprintf (wchar_t*  destinationString, size_t length, const wchar_t* formatString, ...);

这里的参数是:
  • 目标字符串–宽字符,将保存格式化的数据。 它可以是wchar_t的数组或单个宽字符。
  • 长度–写入的字符数。 您应该记住,在字符串末尾将字符串长度加XNUMX以表示空字符。
  • 格式字符串-用于根据格式写入数据的字符串。
  • …–与格式字符串一起使用的参数。

成功时,此函数的返回值是写入的字符数。

下面是一个例子

swprintf(wideString, 6, L"HELLO");

在上述情况下,格式字符串是简单字符串,并且使用“ HELLO”之前的“ L”字符将字符串转换为 const wchar_t*

下一个示例显示如何将格式字符串与格式说明符一起使用:

swprintf(myMessage, 13, L"My age is %d ", 20);

在上述情况下 我的消息 变量将包含“我20岁“。

下表中列出了一些格式说明符:

 说明符类型
 d,我小数或整数。 参数是一个整数值
 U无符号整数
 O八进制整数
 设十六进制整数
 F浮点值
 E科学浮点
 c字符
 s
 n指向int的指针

要打印宽字符,我们应该使用 打印文件 功能:

int wprintf (const wchar_t* formatString, ...);

wprintf 使用指定格式将宽字符写入标准输出。 例如,我们可以打印上面代码中使用的两个宽字符串的值,如下所示
wprintf(wideString);
wprintf(myMessage);

要将宽字符写入标准输出,可以使用 wcout 对象的方式与您使用的方式相同 cout 输出数据。
wcout << "Use of wcout " << wideString << endl;

要从控制台读取宽字符,您必须使用 wcin 而不是 cin
wchar_t name[50];
cout << "Enter your name" << endl;
wcin >> name;
cout << endl << "Your name is ";
wprintf(L"%s", name);