C风格字符串
字符串实际上是使用null字符 \0终止的一维字符数组
声明和初始化创建了一个字符串:
char site[10] = {'A', 'L', 'E', 'X', 'W', 'O' , 'R' ,'L','D', '\0'};
由于在数组的末尾存储了空字符,所以字符数组的大小比单词 ALEXWORLD的字符数多一个。
依据数组初始化规则,您可以把上面的语句写成以下语句:
char site[] = "ALEXWORLD";
其实,您不需要把字符放在字符串常量的末尾。C++编译器会在初始化数组时,自动把\0放在字符串的末尾。
C++ 中有大量的函数用来操作以 null 结尾的字符串:
strcpy(s1, s2);
复制字符串 s2 到字符串 s1。
strcat(s1, s2);
连接字符串 s2 到字符串 s1 的末尾。连接字符串也可以用 + 号,例如:
string str1 = "alex";
string str2 = "world";
string str = str1 + str2;
strlen(s1);
返回字符串 s1 的长度。
strcmp(s1, s2);
如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回值小于 0;如果 s1>s2 则返回值大于 0。
strchr(s1, ch);
返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。
strstr(s1, s2);
返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。
C++ 中的 String 类
C++ 标准库提供了 string 类类型,支持上述所有的操作,另外还增加了其他更多的功能。(注意string.h和string是不一样的头文件)
1、string的定义
string str;
如果要初始化,可以直接给string类型的变量进行赋值。
string str="abcd";
2、string中内容的访问
(1)通过下标访问
一般来说,可以直接像字符数组那样去访问string。
如果要读入和输出整个字符串,则只能用cin和cout。
#include <iostream> #include <string> using namespace std; int main(){ string str; cin >> str; cout << str; }
(2)通过迭代器访问
一般仅通过(1)即可满足访问的要求,但是有些函数比如insert()与erase()则要求以迭代器作为参数。
string::iterator it;
#include <iostream> #include <string> using namespace std; int main() { string str="abcd"; for (string::iterator it = str.begin(); it != str.end(); it++) { printf("%c", *it); } }
3、string常用函数实例解析
(1)operator+=
这是string的加法,可以将两个string直接拼接起来。
(2)compare operator
两个string类型可以直接使用==、!=、<、<=、>、>=比较大小,比较规律是字典序。
(3)length()/size()
length()返回string的长度,即存放的字符数,时间复杂度为O(1)。size()与length()基本相同。
(4)insert()
string的insert()函数有很多种写法,这里给出几个常用的写法,时间复杂度均为O(N)。
(5)erase()
erase()有两种用法:删除单个元素、删除一个区间内的所有元素。时间复杂度均为O(N)。
(6)clear()
clear()用以清空string中的数据,时间复杂度一般为O(1)。
(7)substr()
substr(pos,len)返回从pos号位开始、长度为len的字串,时间复杂度为O(len)。
(8)string::npos
string::npos是一个常数,其本身值为-1,但由于是unsigned_int类型,因此实际上也可以认为是unsigned_int累心的最大值。string::npos用以作为find函数失配时的返回值。
(9)find()
str.find(str2),当str2是str的子串时。返回其在str中第一次出现的位置;如果str2不是str的子串,那么返回string::npos。
str.find(str2,pos),从str的pos号位开始匹配str2,返回值与上相同。
(10)replace()
str.replace(pos,len,str2)把str从pos号位开始、长度位len的子串替换为str2.
str.replace(it1,it2,str2)把迭代器[it1,it2)范围的子串替换为str2。
注意:
使用cin获取字符串时,无法读取含有空格的字符串。
因此需要用到函数getline()
string str;
getline(cin,str);
用printf来输出string,用c_str()将string类型转换为字符数组进行输出,
string str="abcd";
printf("%s\n"str.c_str());
字符串赋空
string str="";
最新评论