数据结构与算法 | 字符与字符串

一、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”字符串

 

猜你喜欢

转载自blog.csdn.net/qq_39930643/article/details/87878254