C++ 字符串

字符串

        C++ 提供了以下两种类型的字符串表示形式:

  • C 风格字符串
  • C++ 引入的 string 类类型

C 风格字符串

        C 风格的字符串起源于 C 语言,并在 C++ 中继续得到支持。字符串实际上是使用 null 字符 ''终止的一维字符数组。因此,一个以 null 结尾的字符串,包含了组成字符串的字符。
        声明和初始化一个 "Hello" 字符串。由于在数组的末尾存储了空字符,所以字符数组的大小比单词 "Hello" 的字符数多一个。

char greeting[6] = {'H', 'e', 'l', 'l', 'o', ''};

        依据数组初始化规则,可以把上面的语句写成以下语句:

char greeting[] = "Hello";

        C/C++ 中,定义的字符串的内存表示:
C++ 字符串_第1张图片
        其实不需要把 null 字符放在字符串常量的末尾。C++ 编译器会在初始化数组时,自动把 '' 放在字符串的末尾。尝试输出上面的字符串

#include 
using namespace std;
int main()
{
	char greeting[6] = { 'H', 'e', 'l', 'l', 'o', '\0' };

	cout << "Greeting message: ";
	cout << greeting << endl;

	return 0;
}

        编译和执行上面的代码:

Greeting message: Hello

C:\Users\ll\source\repos\Project1\Debug\Project1.exe (进程 10652)已退出,代码为 0。
按任意键关闭此窗口. . .

        C++ 中有大量的函数用来操作以 null 结尾的字符串:

函数 目的
strcpy(s1, s2) 复制字符串 s2 到字符串s1。
strcat(s1, s2) 连接字符串 s2 到字符串 s1 的末尾。
strlen(s1) 返回字符串 s1 的长度。
strcmp(s1, s2) 如果两个字符串相同,该函数将返回零;如果第一个字符串按字母顺序排在第二个字符串之前, 则strcmp( )将返回一个负数值;如果第一个字符串按字母顺序排在第二 个字符串之后,则strcpm( )将返回一个正数值。
strchr(s1, ch) 返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。
strstr(s1, s2) 返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。

        实例:

#define  _CRT_SECURE_NO_WARNINGS
#include 
#include 
using namespace std;
int main()
{
	char str1[15] = "Hello";
	char str2[15] = "World";
	char str3[20];
	int len;

	strcpy(str3, str1);// 复制 str1 到 str3
	cout << "strcpy( str3, str1) : " << str3 << endl;

	strcat(str1, str2);	// 连接 str1 和 str2,注意str1数组的大小,避免溢出
	cout << "strcat( str1, str2): " << str1 << endl;

	len = strlen(str1);	// 连接后,str1 的总长度
	cout << "strlen(str1) : " << len << endl;

	return 0;
}

        编译和执行上面的代码:

strcpy( str3, str1) : Hello
strcat( str1, str2): HelloWorld
strlen(str1) : 10

C:\Users\ll\source\repos\Project1\Debug\Project1.exe (进程 5764)已退出,代码为 0。
按任意键关闭此窗口. . .

C++ 中的 String 类

        C++ 标准库提供了 string 类类型,支持上述所有的操作,另外还增加了更多的功能。看下面这个实例:
        目前为止还没有讨论类和对象,可能还无法透彻地理解这个实例,所以可以粗略地看下这个实例。

#include 
#include 
using namespace std;
int main()
{
	string str1 = "Hello";
	string str2 = "World";
	string str3;
	int len;

	str3 = str1;// 复制 str1 到 str3
	cout << "str3 : " << str3 << endl;

	str3 = str1 + str2;// 连接 str1 和 str2
	cout << "str1 + str2 : " << str3 << endl;

	len = str3.size();// 连接后,str3 的总长度
	cout << "str3.size() : " << len << endl;

	return 0;
}

        编译和执行上面的代码:

str3 : Hello
str1 + str2 : HelloWorld
str3.size() : 10

C:\Users\ll\source\repos\Project1\Debug\Project1.exe (进程 5656)已退出,代码为 0。
按任意键关闭此窗口. . .

你可能感兴趣的:(C++,c++,c语言,开发语言,经验分享)