C++string中有关字符串内容修改和替换的函数畅聊
发布时间:2021-12-10 20:49:27 所属栏目:PHP教程 来源:互联网
导读:C++string中有关字符串内容修改和替换的函数浅析 1.assign() 原型: //string (1) basic_string assign (const basic_string str); //substring (2) basic_string assign (const basic_string str, size_type subpos, size_type sublen); //c-string (3) bas
C++string中有关字符串内容修改和替换的函数浅析 1.assign() 原型: //string (1) basic_string& assign (const basic_string& str); //substring (2) basic_string& assign (const basic_string& str, size_type subpos, size_type sublen); //c-string (3) basic_string& assign (const charT* s); //buffer (4) basic_string& assign (const charT* s, size_type n); //ill (5) basic_string& assign (size_type n, charT c); //range (6) template <class InputIterator> basic_string& assign (InputIterator first, InputIterator last); ps:charT是类模板basic_string的第1个参数,指定了字符串中字符的类型。用char实例化basic_string,得到string(可参考在下的“C++ string到底是什么”)。所以, 在string中,charT就是char。 示例: #include<iostream> #include<string> using namespace std; int main() { string str1("123456"); string str = "123456789"; char* str2 = "abcdef"; str.assign(str1); cout << str << endl;//123456 可见执行assign()后,str将被重写 str.assign(str1, 2, 3); cout << str << endl;//345 从位置2开始的3个字符 str.assign(str1, 1, 20);//超出范围 cout << str << endl;//23456 cout << str.length() << endl;//5 可见没有空格 str.assign(str1, 2, str1.npos);//后面介绍npos cout << str << endl;//3456 从位置2到末尾的字符给str str.assign(5, 'X'); cout << str << endl;//XXXXX str.assign(str1.begin(), str1.end() - 1); cout << str << endl;//12345 从开头到结尾-1(即倒数第个字符) //str.assign(str1.begin() + 4, str1.end() - 4);//不能反着来,即试图将以str1.begin() + 4(5)开头,以str1.end() - 4(2)结尾的5432给str是不行的 //cout << str << endl; //这样会出现运行时错误 str.assign(str1.begin() + 2, str1.end() - 3);//前后指向同一字符(3),这样可以 cout << str << endl;//3 str.assign(str1.begin() + 2, str1.end() - 4);//这个却可以 cout << str << endl;//空行 cout << str.length() << endl;//0 str.assign("abcdefg", 6); cout << str << endl;//abcdef 将abcdefg的前6个字符给str str.assign("abcdefg", 20);//超出范围 cout << str << endl;//abcdefg+乱码 cout << str.length() << endl;//10 说明将"abcdefg+3个空格"给了str str.assign(3, 0x41); cout << str << endl;//AAA 可以使用16进制的ASCII码 0x41换成10进制是65,是A的ASCII码 str.assign(str2); cout << str << endl;//abcdef str.assign(str2, 2, 3); cout << str << endl;//cde 对char*型也可以 return 0; } 以上代码中有一句 str.assign(str1, 2, str1.npos); 这里我们解释npos: 它的定义如下: std::string::npos static const size_t npos = -1; 它是size_t类型的最大值,有些编译器也将它置为string对象的最大容量(按字节算,包括' |