c++:
C++ 提供了以下两种类型的字符串表示形式:
- C 风格字符串
实际上是使用 null 字符 '\0' 终止的一维字符数组。
相关函数:
1 | strcpy(s1, s2); 复制字符串 s2 到字符串 s1。 |
2 | strcat(s1, s2); 连接字符串 s2 到字符串 s1 的末尾。 |
3 | strlen(s1); 返回字符串 s1 的长度。 |
4 | strcmp(s1, s2); 如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回值小于 0;如果 s1>s2 则返回值大于 0。 |
5 | strchr(s1, ch); 返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。 |
6 | strstr(s1, s2); 返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。 |
- C++ 引入的 string 类类型
这个用到的最多,其为c++标准库提供,支持更多功能,他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个泛型类出现,他集成的操作函数足以完成我们大多数情况下的需要,可以把它看成是C++的基本数据类型。
头文件:#include<string>
相关函数:
1. empty() // 若s为空串,则返回true,否则返回false;
2 . size()和length() //现有字符数;
3 . 赋值,第一个赋值方法当然是使用操作符=;
还可以使用成员函数assign(),这个成员函数可以使你更灵活的对字符串赋值:
s.assign(str);
s.assign(str,1,3);//如果str是”iamangel” 就是把”ama”赋给字符串
s.assign(str,2,string::npos);//把字符串str从索引值2开始到结尾赋给s
s.assign(“gaint”);
s.assign(“nico”,5);//把’n’ ‘I’ ‘c’ ‘o’ ‘\0’赋给字符串
s.assign(5,’x’);//把五个x赋给字符串
4 . 把字符串清空的方法有三个:s=””;s.clear();s.erase();
string提供了很多函数用于插入(insert)、删除(erase)、替换(replace)、增加字符(+=、append()、push_back()):
s+=str;//加个字符串
s+=”my name is jiayp”;//加个C字符串
s+=’a’;//加个字符
s.append(str);
s.append(str,1,3);//不解释了 同前面的函数参数assign的解释
s.append(str,2,string::npos)//不解释了
s.append(“my name is jiayp”);
s.append(“nico”,5);
s.append(5,’x’);
s.push_back(‘a’);//这个函数只能增加单个字符 对STL熟悉的理解起来很简单
5.在string中间的某个位置插入字符串,用insert()函数,这个函数需要你指定一个安插位置的索引,被插入的字符串将放在这个索引上。
str1.insert(0,"123abc");
str1.insert(1,"..");//1..23abc
这种形式的insert()函数不支持传入单个字符,这时的单个字符必须写成字符串形式,为了插入单个字符,insert()函数提供了两个对插入单个字符操作的重载函数:
insert(size_type index,size_type num,chart c)
和
insert(iterator pos,size_type num,chart c)。
其中size_type是无符号整数,iterator是char*,
所以,你这么调用insert函数是不行的:insert(0,1,’j’);这时候第一个参数将转换成哪一个呢?
你必须这么写:insert((string::size_type)0,1,’j’)!
str1.insert((string::size_type)4, 1, ' ');
cout << str1 << endl;//1..2 3abc
删除函数erase()
//从位置0开始替换2个字符为空字符
str1.replace(0, 2, " ");// .hu cheng ming yesterday once more
str1.replace(0, 3, "z");//zhu cheng ming yesterday once more
//从位置3开始以后的字符全删掉
str1.erase(3);//zhu
//从位置0开始删除3个字符
str1.erase(0, 3);//""//没有了