string
先引入头文件
#include <string>
首先定义一个string字符串
std::string str;
下文中使用 using namespace std 命名空间
在定义字符串的同时,可以初始化他,赋给他一个值
string str("cat dog big");
这个效果就等同于c语言中的
char *str = "cat dog big";
也可以这样初始化,让他全部都是固定的字符
string str(10,'a');
这样 字符串str 里面就有 aaaaaaaaaa 这个数据了
那假设我现在想将刚才定义的字符串中的一段数据作为我新字符串的内容
string str2(str,4,3);
将他写入程序中试一试
int main(int argc,char *argv[]) { string str("cat dog big"); string str2(str,4,3); cout<<str2<<endl; return 0; }
输出结果为
dog
也就是将 str 中 第4个字符 (d) 开始 提取出3个字符 作为新字符串str2的值
赋值
str = "good good study";
也可以使用函数 assign() 赋值
str.assign("day day up"); //将str中数据重置为day day up str.assign(10,'a'); //将str中数据重置为aaaaaaaaaa str.assign("day day up",4,3); //从第4位开始 取第一个参数中的3个字符 作为新str 的内容 最终为day
字符串长度
str.length();
str.size();
这两个成员函数的返回值即为长度
将两个字符串连接起来
string str1("good"); string str2("upup"); string str3 = str1 + str2;
str3 的值为 goodupup
也可以这样
string str1("good"); string str2("upup"); str1.append(str2);
将str2 接在 str1的后面
str1.append(str2,2,2); //在str1后面接 从str2的第2个字符开始 连续2个字符 str1.append(2,'a'); //在str1后面接aa
字符串的比较
可以用<、<=、==、!=、>=、> 等运算符比较字符串的大小
也可以使用conpare
int n = str1.compare(str2);
str1 比 str2 小 -1
str1 比 str2 大 1
相等返回0
得到子串
string str("abcd"); string str2 = str.substr(2); //cd 从第2个开始取 取到结束 string str3 = str.substr(1,2); //bc 从第1个开始取 取2个
交换字符串内容
str.swap(str1);
把 str 的内容给 str1 把 str1 的内容给 str
查找字符串/字符
str.find('o');
返回字符串 str 中, 第一次出现o的位置
字符串也是一样的用法,将要查找的内容换为 "od"
str.find('o',3);
在第4个元素之后查找o 返回o的位置
str.find_first_of("god");
查询第一次出现 g 或 o 或 d 的位置
str.find_last_of(‘o’);
查询最后一次出现o的位置
str.find_first_not_of("god");
查询第一次出现非 g 非 o 非 d 的字母的位置
看一个例子
int main(int argc,char *argv[]) { int n; string str("good good study"); if ((n = str.find('o')) != string::npos) { cout<<"第一次出现o是在第" <<n<<"个"<<endl; } return 0; }
返回结果n为1
注意这里在判断的时候 要用 string::npos 这个值是 string::size_type 类型的 -1
删除子串
str.erase(2); //删除第3个字符 str.erase(1,3); //从第2个开始删除3个字符
插入字符串
str.insert(2,"aaa");
在第3个字符处 插入 aaa
也可以这样
str.insert(2,3,‘a’);
替换字符串
str.replace(1,2,"run");
从第2个字符开始删除2个 并插入"run"