#include<iostream> using namespace std; #include"string" #include"algorithm" /*初始化*/ int main01() { /////////////////////////////初始化方法 string s1 = "aaaaaaaaaa"; //string(const char *s); string s2("bbbbbbbbbb"); string s3(s1); //string(const string &t) string s4 = s1; //copy构造函数 string s5 = s1 + "bbb"; //lianjie string s6 = s1 + s2; string s0(s1, 0, 3); //从s1的第0个字符开始取3个字符到s0中 ////////////////////////////迭代器初始化 string s7 = "How are you"; string s8(s7.begin(), s7.end()); string s9(s7.begin() + 4, s7.begin() + 7); cout << "s1 " << s1 << endl; cout << "s2 " << s2 << endl; cout << "s3 " << s3 << endl; cout << "s4 " << s4 << endl; cout << "s5 " << s5 << endl; cout << "s6 " << s6 << endl; cout << "s7 " << s7 << endl; cout << "s8 " << s8 << endl; cout << "s9 " << s9 << endl; return 0; } /*遍历*/ int main02() { string s1 = "Thank you"; /////////////////////////////////数组法 /* operator[]和 at()均返回当前字符串中第 n 个字符, 但二者是有区别的。 主要区别在于 at()在越界时会抛出异常, []在刚好越界时会返回(char)0, 再继续越 界时, 编译器直接出错。 如果你的程序希望可以通过 try,catch 捕获异常, 建议采用 at()。 */ //const char &operator[] (int n) const; for (int i = 0; i < s1.length() ; i++)//int length()求长度 { cout << s1[i]; } cout << endl; //const char &at(int n) const; try { for (int i = 0; i < s1.length() + 3; i++) { cout << s1.at(i); } cout << endl; } catch (...) { cout << "发生异常" << endl; } //////////////////////////迭代法 for (string::iterator it = s1.begin(); it != s1.end(); it++) { cout << *it; } cout << endl; return 0; } /*string \char * 之间的转化 、 连接*/ int main03() { string s1 = "aaa"; //1、string---->>char* cout << s1.c_str() << endl;//返回一个以'\0'结尾的字符串的首地址 //2、char*--->>string //3、连接 string s2 = "111"; string s3 = "222"; string s4 = s1 + s2;//方法一 s2.append(s3);//方法二 cout << "s2:" << s2 << endl; cout << "s4:" << s4 << endl; return 0; } /*拷贝*/ int main04() { /* 把当前串中以 pos 开始的 n 个字符拷贝到以 s 为起始位置的字符数组中, 返回实际 拷贝的数目。 注意要保证 s 所指向的空间足够大以容纳当前字符串, 不然会越界。 */ /* 查找MSDN得知,该成员函数因为可能存在下标越界风险已经被弃用,并提供了 basic_string::_Copy_s 代替 basic_string::copy */ //////////////// int copy(char *s, int n, int pos=0) const; string s1 = "ABCDEFG"; char buff[128] = {0};//先要分配内存 s1._Copy_s(buff,3,0);// cout << "kaobei buff=" << buff << endl; return 0; } /*查找和替换*/ int main05() { string s1 = "hao hao xue xi hao hao, tian tian xiang shang tian tian.";//55 ////////////find查找语法 /* string s2 = "xi"; int n1 = s1.find(s2, 0); cout << n1 << endl; int n = s1.find("tian", 0);//24(tian) cout << "返回首次匹配位置find: " << n << endl;//返回首次匹配的开始位置; n = s1.find_first_of("111gyz", 0);//38(向g) cout << "返回匹配任何字符的第一次位置find_first_of: " << n << endl;//返回值是第一个与指定字符串中任何字符匹配的字符位置; n = s1.find_last_of("111gyz", 55);//44 (上g) 最后一次位置是从串尾向前查找 cout << "返回匹配任何字符的最后一次位置find_first_of: " << n << endl;//返回值是最后一个与指定字符串中任何字符匹配的字符位置; n = s1.find_first_not_of("abcdefg", 0);//0(好h) cout << "返回不匹配任何字符的第一次位置find_first_of: " << n << endl; n = s1.find_last_not_of("abcdefg", 55);//55(天n)最后一次位置是从串尾向前查找 cout << "返回不匹配任何字符的最后一次位置find_first_of: " << n << endl; n = s1.rfind("tian", 55);//51(tian) cout << "反向查找:" << n << endl; */ //////////////////////求指定字符的出现次数 /* int n = s1.find("xue", 0); int times = 0;//tian 出现的次数 while (n != string::npos)//求tian出现的所有位置,并显示输出 { times++; cout << n << endl;//8 n = n + 1; n = s1.find("xue",n); } cout << "times=" << times << endl;;//1 */ /////////////////////////////字符替换(将a替换成A) int n = s1.find("a", 0); cout << "替换前:" << s1 << endl; while (n != string::npos) { s1.replace(n,1,"A");//n是a出现的位置,1 指删除一个a字符,改成A n++; n = s1.find("a",n); } cout << "替换后:" << s1 << endl; return 0; } /*插入与删除*/ int main06() { //删除字符;string &erase(int pos=0, int n=npos); //删除 pos 开始的 n 个字符, 返回修改后的字符串 string s1 = "hello,please enter two world"; string::iterator it = find(s1.begin(), s1.end(),'l'); if (it != s1.end()) { s1.erase(it);//迭代器 } cout << s1 << endl;//"helo,please enter two world"; string s2 = "hello,please enter two world"; s2.erase(s2.begin() + 5, s2.begin() + 12);//删除“,please” cout << s2 << endl;//"hello enter two world" s1.erase(s1.begin(),s1.end());//全部删除 cout << s1.length() << endl;//0 //插入字符 /* string &insert(int pos, const char *s); string &insert(int pos, const string &s); //前两个函数在 pos 位置插入字符串 s string &insert(int pos, int n, char c); //在 pos 位置 插入 n 个字符 c */ string s3 = "abcdefg"; s3.insert(0, "000"); s3.insert(0, s3); cout << "charu zifu hou:" << s3 << endl;//000abcdefg000abcdefg return 0; } /*字符串比较*/ int main07() { string s1 = "agafnajsasdffdsbg"; string s2 = "agaahsudifgadfsdb"; /*运算符 if (s1 > s2) cout << "s1>s2" << endl; if (s1 == s2) cout << "s1=s2" << endl; if (s1 < s2) cout << "s1<s2" << endl; */ //compare函数 /* int compare(const string &s) const; //与字符串 s 比较 int compare(const char *s) const; //与字符串 s 比较 compare 函数在>时返回 1, <时返回 -1, ==时返回 0。 比较区分大小写, 比较时参考字典 顺序, 排越前面的越小。 大写的 A 比小写的 a 小。 */ int n=s1.compare(s2); if (n == 0)//此处“==”应注意 { cout << "s1=s2" << endl; } else { if (n > 0) cout << "s1>s2" << endl; else cout << "s1<s2" << endl; } return 0; } /*常用算法*/ #include"sstream" int main08() { /////////////////////大小写转换/////////////////////////// /* string s2 = "AAAbbb"; transform(s2.begin(), s2.end(), s2.begin(), toupper); cout << s2 << endl; string s3 = "AAAbbb"; transform(s3.begin(), s3.end(), s3.begin(), tolower); cout << s3 << endl; */ /////////////////////将整数变换成字符串/////////////////// /* 用流类strstream做中间媒介,实现基本数据类型与字符串的相互转化。 strstring是输入输出流,利用输入输出流功能先填充输出缓冲区,再利用输入流功能依次读缓冲区, 赋值给相应的变量。 */ /* int n1 = 12345; string s1; strstream os1;//理解此语法 os1 << n1; os1 >> s1; cout << "将整数变换成字符串:" << s1 << endl; */ /////////////////////////拆分字符串1////////////////////// /* string s2 = "How are you?"; //源串 string s3 = " "; //按空格拆分 string sResult; //拆分结果串 int n = 0; //n = s2.find_first_of(s3, 0);//拆分子串结束位置 int prev= 0; //拆分子串开始位置 while ((n = s2.find_first_of(s3, n)) != string::npos) { sResult = s2.substr(prev, n - prev);//substr函数是一个给定起点和截取长度,截出字符串中一段的函数 cout << "string=" << sResult << endl; prev = ++n;//下一串起始位置、结束位置=当前子串结束位置+1; } if (prev != s2.size())//判断 有无最后一个子串 { sResult = s2.substr(prev, n - prev); cout << "string="<<sResult << endl; } */ /////////////////////////拆分字符串2////////////////////// string s4 = " "; string s5 = "How are you?"; istringstream istr(s5); //用字符串输入流封装字符串 while (!istr.eof())//当非字符串输入流末尾 { istr >> s4; //读输入流便给变量赋值 //getline(istr,s4, ","); cout << "string=" << s4 << endl; } return 0; } int main() { main01();//初始化 main02();//遍历 main03();//string\char* 连接 main04();//拷贝 main05();//查找 main06();//插入与删除 main07();//比较 main08();//常用算法 system("pause "); return 0; }
String 语法
猜你喜欢
转载自blog.csdn.net/ukston_c/article/details/80548873
今日推荐
周排行