03. 字符类型
03. 字符类型
char
参见整型
复合类型 > 直接使用类 > 字符串
其实也是一种特殊的容器类型
简概
原理:字符串的变量名本质上存储的是一个地址(存储形式为字符串)
当输出时,不输出地址,而是输出地址所表示的东西
原理的验证实验:
cout << ac_dog4[0] << "\t"		 		// 输出单个字符
    << &ac_dog4 << "\t"					// 输出地址
    << &ac_dog4 + 0 << "\t" 			// 输出地址
    << hex << long(&ac_dog4[0]) << dec	// 输出地址
    << ac_dog4 << "\t" 					// 输出字符串
    << &ac_dog4[0] << "\t" 				// 输出字符串
    << endl;使用
字面量方式
- C-风格字符串(C-style string)
- 数组法
- 性质:以空字符
\0(null character,ASCII为0)结尾,可以不显性标注(会自动补\0) - 自动填补:数组是填补0,而字符串是填补
\0 - 举例:
char ac_dog[] = {'d', 'o', 'g', '\0'}; - 如果不以空字符结尾:
cout会一直输出知道遇到空字符为止(空字符在内存中很常见,这一个过程很快停止) - 缺点:冗长乏味(使用大量单引号),且必须记住加空字符
 
 - 性质:以空字符
 - 字符串常量(string constant)或字符串字面值(string literal)
- 性质:以空字符
\0(null character,ASCII为0)结尾,可以不显性标注(字符串本来就隐式包括结尾的空字符) - 自动填补:数组是填补0,而字符串是填补
\0 - 举例:
char ac_dog[] = {"dog"}=char ac_dog[4] = {"dog"}=char ac_dog[4] = {'d','o','g','\0'} - 注意:通常要多预留一位给空字符串,上面几种写法是等价的==(把4改成3会报错,拿不准数量时最好是让程序自动填充长度)==
 
 - 性质:以空字符
 
 - 数组法
 - 基于string类库的方法:见后
 
符号操作(与Java不同)
- 拼接字符串:用空白(空格、制表符、换行符)分隔的字符串常量会自动拼接成一个(Java中使用
+号拼接)- 举例:
cout << "d" "og"; 
 - 举例:
 
内置函数方法
计算长度:
strlen(),计算数组中字符串的长度,到第一个空字符时停止且不计算后续内容的长度(sizeof则是整个数组的长度)只能计算
char[]类型,不能计算其他数组类型比较:
strcmp()(不能使用==比较,因为会被解释为地址,但string类可以)- 若相同:返回零
 - 若第一个字符串按字母顺序排在第二个字符串之前:返回负数
 - 若第一个字符串按字母顺序排在第二个字符串之后:返回正数
 
String
String类 - 简概(新)(C++新增)
头文件:C++的String类需要包含头文件
string,string类位于名称空间std中string类与字符数组区别:string类定义隐藏了字符串的数组性质,可以像处理普通变量那样处理字符串
本质:模板类 & 动态数组(动态联结)
String类 - 使用(新)(C++新增)
字面量方式
定义
支持C-风格字符串定义,
string str = "dog";可以使用cin来存储,
cin >> str;可以使用列表初始化,
string str = {"dog"};”其他形式的字符串字面量值“:略
其他定义方法
string s1(); // s1 = "" string s2("Hello"); // s2 = "Hello" string s3(4, 'K'); // s3 = "KKKK" string s4("12345", 1, 3); // s4 = "234",即 "12345" 的从下标 1 开始,长度为 3 的子串
string对象和字符数组区别(优点)
- 声明:可以将string对象声明为简单变量,而不是数组
 - 赋值:可以直接将一个string对象赋值给另一个(而不能将一个数组赋值给另一个)
 - 拼接字符串:用
+拼接,如str = s1 + s2(数组无该方法,只能依靠cout拼接) - 附加:可以使用
+=附加,如str += s1(数组无该方法) 
CString
cstring类 - 简概(旧)
- 头文件:在早期C++新增string类之前,可以使用C的string库
cstring(以前的string.h),没有名称空间 
cstring类 - 使用(旧)
函数方法(
cstring库)
strcpy(charr1, charr2),可以将字符串拷贝到字符数组中strncpy(charr1, charr2, len)还可以指出目标数组最大允许长度的第三个参数strcat(charr1, charr2),可以将字符串附加到字符数组结尾strncat(charr1, charr2, len)还可以指出目标数组最大允许长度的第三个参数
链接到当前文件 0
没有文件链接到当前文件