一、char 字符型
- char继承于C语言:char a = ' b ', // 表示单个字符,长度为1个字节;而char a[] = "b", // 表示的是一个字符串,长度为2个字节。
- char [] 表示字符串时是以'\0’作为结尾,如果结尾没有‘\0’则表示的是存储字符的数组。如:
char str1[] = {'h','e','l','l','o'} //表示字符数组;
char str2[] = {'h','e','l','l','o','\0'} //表示“hello"字符串;
char str3[] = "hello" //等价于char str3[] = {'h','e','l','l','o','\0'}。
- C++ 中有大量的函数用来操作以‘\0' 结尾的字符串:
strcpy(s1, s2),复制字符串 s2 到字符串 s1。
strcat(s1, s2),连接字符串 s2 到字符串 s1 的末尾。
strlen(s1),返回字符串 s1 的长度(除开’\0‘的字符长度,strlen(str3)等于5)。
strcmp(s1, s2),如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回值小于 0;如果 s1>s2 则返回值大于 0。
strchr(s1, ch),返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。
strstr(s1, s2),返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。
二、string字符串类类型
- C++标准库有string类类型,表示可变长的字符序列;使用string必须首先包含<string>头文件。
- 定义和初始化
string s1, // 默认初始化,s1是一个空字符串;
string s2(s1), //s2是s1的副本;
string s2 = s1 , // 等价于s2(s1);
string s3("value"), //s3为”value";
string s3 = "value", // 等价于s3("value");
string s4(n,'c'), // s4初始化为连续的n个'c'字符串。
- 重要操作
getline(cin,s), // 读取整行赋值给s
s.empty(), // s为空返回true,否则返回false
s.size(), // 返回s字符的个数
s[n], // 返回s第n个字符的引用
==,!=,<,<=,>=,> //利用字典中的顺序进行比较,对字母大小写敏感
特别注意当使用cin读取string是从第一个字符开始读取(会忽略第一个字符前的空格符,换行符等),直到遇到空格符、换行符等结束。如:
void ReadString(string &s)
{
cin << s;
cout<<s<<endl;
}
当输入" Hello World "时,s读取为"Hello".
- cctype 头文件字符操作函数(参数都为单个字符)
isalnum() 如果参数是字母数字,即字母或者数字,函数返回true
isalpha() 如果参数是字母,函数返回true
iscntrl() 如果参数是控制字符,函数返回true
isdigit() 如果参数是数字(0-9),函数返回true
isgraph() 如果参数是除空格之外的打印字符,函数返回true
islower() 如果参数是小写字母,函数返回true
isprint() 如果参数是打印字符(包括空格),函数返回true
ispunct() 如果参数是标点符号,函数返回true
isspace() 如果参数是标准空白字符,如空格、换行符、水平或垂直制表符,函数返回true
isupper() 如果参数是大写字母,函数返回true
isxdigit() 如果参数是十六进制数字,即0-9、a-f、A-F,函数返回true
tolower() 如果参数是大写字符,返回其小写,否则返回该参数
toupper() 如果参数是小写字符,返回其大写,否则返回该参数
- 其它常用的string操作
string s(s2,pos) // s是s2从下标pos的拷贝
string s(s2,pos,len) // s是s2从小标pos开始len长度的字符串拷贝
substr, 是原字符串的一部分或者全部拷贝,如:
string s("hello world");
string s1 = s.substr(s,5) // s1 = "hello"
string s2 = s.substr(6) // s2 = "world"
string s3 = s.substr(6,11) // s3 = "world"
string s4 = s.substr(12) // 抛出out_of_rang的异常
string的修改操作:
s.insert(pos,args)
s.append(args)
s.erase(pos,len)
s.replace(range,args)
string的搜索操作:
s.find(args) // 返回args第一次出现的位置(下标)
s.rfind(args) //返回args最后一次出现的位置(下标)
s.find_first_of(args) // 返回args任何一个字符第一次出现的位置(下标)
s.find_last_of(args) //返回args任何一个字符最后一次出现的位置(下标)
s.find_first_not_of(args) //返回第一个不再args中的字符
s.find_last_not_of(args) //返回最后一个不再args中的字符
s.compare(s2) // 比较s和s2
s.compare(pos1,n1,s2) //将s中从pos1开始的n1个字符与s2进行比较
s.compare(pos1,n1,s2,pos2,n2) //将s中pos1开始的n1个字符与s2中从pos2开始的n2个字符进行比较。
string 和int 类型转换
int i = 42;
string s = to_string(i);
// s为"42”字符串