STL可变长字符串类
#include<string.h> //c 语言的字符串操作 #include<cstring> // 符合 c++标准 字符串操作 #include<string>//c++ STL可变长字符串类 #include<iostream> using std::string; template<typename T>//不同的数据类型在反汇编中自动生成不同的地址 void Swap(T& lhs, T&rhs) { T temp; temp = lhs; lhs = rhs; rhs = temp; } int main() { //std::wstring wstr; //宽字节 存放unicode wchar_t 2byte //string str; //窄字节 字节上大小不同 char 1byte string str("123456789", 3);// 取前三个出来 std::cout << str << std::endl; string str1(10, 'A');// 把字符复制10次 string str2(str, 3); // 456789 从第3+1个元素开始取 //位置 长度 string str3(str, 3, 3);// 789 string str4("123455", 3, 3);//456 从[3]开始取3个 //===> 产生临时对象string(char*)temp //string(string,1,2) string str5("123455", 3); //取前三个 //长度操作 string str6;//使用的默认构造,传递的是一个空字符串 str6.size(); // 0 返回当前string的length str6.length();// 0 返回当前string的length 和size一样 str6.empty();// 1 str6.max_size(); str6.capacity(); str6.resize(100, 'a');//填充a //查找 string str7("12345678"); std::size_t pos = str7.find('1');// 全匹配 返回一个size_t的对象 查到返回第一次的当前下标, //查不到返回 std::string::npos(不要使用-1) std::size_t pos1 = str7.find("12", 4);// 第二个参数是开始查找的位置 std::size_t pos2 = str7.find("123434", 4, 4); //第三个参数是待查找字符串的前几个 str7.rfind('8');//和find一样,查找的顺序是从尾部开始查 str.find_first_of('8');//查找第一个 str.find_last_of('8');//查找最后一个 str.find_first_not_of('8');//查找第一个不是这个串里任何一个字符的值的位置 //Emp 查找出数字串 string strl("asdcerx 012324984 edhfvld"); std::size_t pos_begin = strl.find_first_of("1234567890"); std::size_t pos_end = strl.find_first_not_of("1234567890", pos_begin); string num(strl.begin() + pos_begin, strl.begin() + pos_end); //比较 和c语言 strcmp 一样 int pos = pos_begin; int len = num.size(); std::cout << (strl.compare(pos, len, num) == 0) << std::endl; //截取 string num = (strl.substr(pos_begin, pos_end - pos_begin)); //交换 num.swap(strl); //拼接 num += 100;//不能接浮点数,整数会被转成char型,接char和字符串才能直接拼接在后面 num.append(10, 'M');//在后面拼接10个M //访问 num[4];//如果下标越界 抛出系统异常,不能try catch num.at(4);//如果下标越界 抛出能处理的异常 //c风格字符串转换 //strlen(num); 没有重载 operator char*() strlen(num.c_str());//c_str 返回const char* return 0; }