C++ Primer(第五版)学习笔记_5_标准模板库string(2)
10、搜索string对象的元素或子串
采用find()方法可查找字符串中的第一个字符元素(char, 用单引号界定)或者子串(用双引号界定);如果查到,则返回下标值(从0开始计数),如果查不到,则返回一个很大的数string:npos(即:4294967295)。
#include <iostream> #include <stdio.h> #include <string> using namespace std; int main(int argc, char* argv[]) { string s; s = "cat dog cat"; //查找第一个字符'c',返回下标值 cout << s.find('c') << endl; //查找第一个子串"c",返回下标值 cout << s.find("c") << endl; //查找第一个子串"cat",返回下标值 cout << s.find("cat") << endl; //查找第一个子串"dog",返回下标值 cout << s.find("dog") << endl; //查找第一个子串"pig",查不到则返回4294967295 cout << s.find("pig") << endl; if(s.find("pig") == string::npos) cout << "没有找到" << endl; return 0; }
运行结果:
0
0
0
4
4294967295
没有找到
11、string对象的比较
string对象可以使用compare()方法与其他字符串相比较。如果它比对方大,则返回1;如果它比对方小,则返回-1;如果它与对方相同,则返回0。
#include <iostream> #include <stdio.h> #include <string> using namespace std; int main(int argc, char* argv[]) { string s; s = "cat dog cat"; //使用比较符号">","<","==" cout << (s == "cat dog cat") << endl; //s比"abc"字符串大,返回1 cout << s.compare("abc") << endl; //异常:s比"cat dog c"字符串大,返回2,发现返回值是剩下2个值不一致则返回2. cout << s.compare("cat dog c") << endl; //s比"dog"小,返回-1 cout << s.compare("dog") << endl; //s与"cat dog cat"相等,返回0 cout << s.compare("cat dog cat") << endl; return 0; }
运行结果:
1
1
2
-1
0
12、用reverse反向排序string对象
采用reverse()方法可将string对象迭代器所指向的一段区间中的元素(字符)反向排序。
#include <iostream> #include <string> #include <algorithm> using namespace std; int main(int argc, char* argv[]) { string s; s = "123456789"; reverse(s.begin(), s.end()); cout << s << endl; return 0; }
运行结果:
987654321
13、string对象作为vector元素
string对象可以作为vector向量的元素,这种用法,类似于字符串数组。
#include <iostream> #include <string> #include <algorithm> using namespace std; int main(int argc, char* argv[]) { vector<string> str; str.push_back("Jack"); str.push_back("Mike"); str.push_back("Tom"); for(int i = 0; i < str.size(); i++) cout << str[i] << endl; cout << str[0][0] << endl; cout << str[1][0] << endl; cout << str[2].size() << endl; return 0; }
运行结果:
Jack
Mike
Tom
J
M
3
14、string类型的数字化处理
常常需要将读入的数字的每位分离出来,如果采用取余的方法,花费的时间就会太长,这时,就将读入的数据当成字符串来处理,这样就省时了。
#include <iostream> #include <string> using namespace std; int main(int argc, char* argv[]) { string s; s = "1234059"; int sum = 0; for(int i = 0; i < s.length(); i++) { if(s[i] == '0') sum += 0; else if(s[i] == '1') sum += 1; else if(s[i] == '2') sum += 2; else if(s[i] == '3') sum += 3; else if(s[i] == '4') sum += 4; else if(s[i] == '5') sum += 5; else if(s[i] == '6') sum += 6; else if(s[i] == '7') sum += 7; else if(s[i] == '8') sum += 8; else if(s[i] == '9') sum += 9; } cout << sum << endl; return 0; }
运行结果:
24
15、string对象与字符数组互操作
#include <iostream> #include <stdio.h> #include <string> using namespace std; int main(int argc, char* argv[]) { string s; char ss[100]; //输入字符串到字符数组中 scanf("%s", &ss); //字符数组赋值字符串对象 s = ss; //用pringf输出字符串对象,要采用c_str()方法 printf(s.c_str()); cout << endl; //用printf输出字符数组 printf("%s", ss); cout << endl; return 0; }
运行结果:
abc123
abc123
abc123
16、string对象与sscanf函数
在c语言中,sscanf函数很管用,它可以把一个字符串按你需要的方式分离出子串,甚至是数字。
#include <iostream> #include <stdio.h> #include <string> using namespace std; int main(int argc, char* argv[]) { string s1, s2, s3; char sa[100], sb[100], sc[100]; //将字符串分离成数字,分隔符为空格 sscanf("abc 123 pc", "%s %s %s", sa, sb, sc); s1 = sa; s2 = sb; s3 = sc; cout << s1 << " " << s2 << " " << s3 << endl; //将字符串分离成数字,分隔符为空格 //当用到数字的时候,跟scanf一样,它需要传指针地址 int a, b, c; sscanf("1 2 3", "%d %d %d", &a, &b, &c); cout << a << " " << b << " " << c << endl; //当字符串分离成数字,分隔符为","和"$" //当用到数字的时候,跟scanf一样,它要传指针地址 int x, y, z; sscanf("4,5$6", "%d,%d$%d", &x, &y, &z); cout << x << " " << y << " " << z << endl; return 0; }
运行结果:
abc 123 pc
1 2 3
4 5 6
17、string对象与数值相互转换
#include <iostream> #include <sstream> #include <string> #include <stdio.h> using namespace std; //将数值转化为string的第二种方法:C++方法 string convertToString(double x) { ostringstream o; if(o << x) return o.str(); return "error"; } double convertFromString(const string &s) { istringstream i(s); double x; if(i >> x) return x; return 0.0; } int main(int argc, char* argv[]) { //将数值转化为string的第一种方法:C方法 char b[10]; string a; sprintf(b, "%d", 1975); a = b; cout << a << endl; //将数值转化为string的第二种方法:C++方法 string cc = convertToString(1976); cout << cc << endl; //将string转化为数值的第一种方法:C++方法 string dd = "2006"; int p = convertFromString(dd) + 2; cout << p << endl; return 0; }
运行结果:
1975
1976
2008
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-08 13:24:38