C++ STL string对象操作汇总
2017-06-05 16:00
288 查看
string对象
C语言只提供了一个char类型用来处理字符,而对于字符串,只能通过字符串数组来处理,显得十分不便。C++STL提供了string基本字符系列容器来处理字符串,可以把string理解为字符串类,它提供了添加、删除、替换、查找和比较等丰富的方法。虽然使用
vector<char>这样的向量也可以处理字符串,但功能比不上string。向量的元素类型可以是string,如
vector<string>这样的向量,实际上就类似于C语言中的字符串数组。
使用string容器,需要头文件包含声明“
#include <string>”。string文件在C:\Program Files\Microsoft Visual Studio\VC98\Include文件夹中可以找到。
1.创建string对象
int main () { string s; };
2.给string对象赋值
直接对字符串进行赋值int main () { string s; s="hello word"; cout<<s<<endl; return 0; }
更常用的方法就是,把一个字符串指针赋给一个字符串对象
int main () { string s; char ss[100]; //scanf是输入速度比cin块得多 //scanf是c语言的函数,不支持string对象 ss="hello word"; s=ss; cout<<s<<endl; return 0; }
3.从string尾部添加字符
int main () { string s; s=s+'a'; s=s+'b'; s=s+'c'; cout<<s<<endl; return 0; }
4.从string尾部添加字符串
直接使用“+”操作符,代码如下s=s+"abd"; s=s+"123";
采用append()方法,代码如下
s.append("abs"); s.append("123");
5.给string对象插入字符(insert)
int main () { string s; s="123456"; //定义迭代器 string::iterator it; //迭代器位置为字符串首 it=s.begin(); //把字符'p'插入到第1个字符前(注意,字符位置是从0开始计数) s.insert(it+1,'p'); return 0; }
运行结果
1p23456
6.访问string对象的元素
一般使用下标方式随机访问string对象的元素,下标是从0开始计数的。另外,string对象的元素是一个字符(char),这点一定要清。代码如下:int main () { string s; s="123456"; //输出对象的第二个元素 cout<<s[1]<<endl; //string 里面元素为字符串类型 cout<<s[1]-'0'<<endl; return 0; }
7.删除string对象元素
1.清空一个字符串,可以直接对string赋空字符串即可。2.使用erase()方法删除迭代器所指的按个元素或这个区间中的所有元素。
代码如下
int main(int argc, char* argv[]) { string s; s="abc123456"; //定义迭代器变量,指向字符串对象首元素 string::iterator it=s.begin(); //删除第3个元素,元素位置从0开始计数 s.erase(it+3); cout<<s<<endl; //删除0~4区间的所有元素 s.erase(it,it+4); cout<<s<<endl; //清空字符串 s=""; //输出字符串的长度 cout<<s.length()<<endl; return 0; }
运行结果:
abc23456
3456
0
8.返回string对象的长度(length()
)
1.length()方法可以返回字符串的长度2.empth()方法可以判断字符串是否为空
int main () { string s; s="abcdef"; //输出字符串的长度 cout<<s.length()<<endl; //清空字符串 s=""; //判断字符串是否为空 cout<<s.empty()<<endl; return 0; }
运行结果
9
1
9.替换string对象的字符(replace())
#include <string> #include <iostream> using namespace std; int main(int argc, char* argv[]) { string s; s="abc123456"; //从第3个开始,将连续的3个字符替换为“good” //即将“abc”替换为“good” s.replace(3,3,"good"); cout<<s<<endl; return 0; }
运行结果:
abcgood456
10.搜索string对象的元素或子串(find())
采用find()方法可查找字符串中的第一个字符元素(char,用单引号界定)或者子串(用双引号界定),如果查到,则返回下标值(从0开始计数),如果查不到,则返回4294967295。find()方法有很多重载函数,下面的代码,仅举出了一种用法。
#include <string> #include <iostream> 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; //查找第一个子串“dogc”,查不到则返回4294967295 cout<<s.find("dogc")<<endl; return 0; }
运行结果如下:
0
0
0
4
4294967295
11.string对象的比较(compare())
string对象可与使用compare()方法与其他字符串相比较。如果它比对方大,则返回1;如果它比对方小,则返回-1;如果它与对方相同相等),则返回0。代码如下:#include <string> #include <iostream> using namespace std; int main(int argc, char* argv[]) { string s; s="cat dog cat"; //s比“cat”字符串大,返回1 cout<<s.compare("cat")<<endl; //s与“cat dog cat”相等,返回0 cout<<s.compare("cat dog cat")<<endl; //s比“dog”小,返回-1 cout<<s.compare("dog")<<endl; return 0; }
运行结果如下:
1
0
-1
12.用reverse方向排序string对象
采用reverse()方法可将string对象迭代器所指向的一段区间中的元素(字符)反向排序。reverse()方法需要声明头文件#include<algorithm>。代码如下:
#include <string> #include <iostream> #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元素
#include <vector> #include <string> #include <iostream> #include <algorithm> using namespace std; int main(int argc, char* argv[]) { vector<string> v; v.push_back("Jack"); v.push_back("Mike"); v.push_back("Tom"); cout<<v[0]<<endl; cout<<v[1]<<endl; cout<<v[2]<<endl; cout<<v[0][0]<<endl; cout<<v[1][0]<<endl; cout<<v[2].length()<<endl; return 0; }
运行结果如下:
Jack
Mike
Tom
J
M
3
14.字符数组和string对象的输入输出
#include <string> #include <iostream> using namespace std; int main(int argc, char* argv[]) { string s; char ss[100]; //输入字符串到字符数组中 scanf("%s",&ss); //字符数组赋值线字符串对象 s=ss; //用printf输出字符串对象,要采用c_str()方法 printf(s.c_str()); //换行 cout<<endl; //用printf输出字符数组 printf("%s",ss); //换行 cout<<endl; //用cout输出字符串对象 cout<<s<<endl; //用cout输出字符数组 cout<<ss<<endl; return 0; }
15.tring对象与sscanf函数
在C语言中,sscanf函数很管用,它可以把一个字符串按你需要的方式分离出子串,甚至是数字。下面这个程序演示了sscanf函数的具体用法:#include <string> #include <iostream> 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
16.string对象与数值相互转换
#include <iostream> #include <string> #include <sstream> using namespace std; //C++方法:将数值转换为string string convertToString(double x) { ostringstream o; if (o << x) return o.str(); return "conversion error";//if error } //C++方法:将string转换为数值 double convertFromString(const string &s) { istringstream i(s); double x; if (i >> x) return x; return 0.0;//if error } 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; }
相关文章推荐
- 关于C++中string对象向int、float、double类型的转换的方法汇总
- c/c++ 收集string的操作汇总
- c++ stl 使用汇总(string,vector,map,set)
- c/c++ 收集string的操作汇总
- C++中STL对string进行trim,split,replace操作
- C++:STL容器中,string操作
- STL + c++ + 模板 + 重要思维 + 基础算法+ 经典算法 + 经典实例 + 编程总结+ 心得+ 入门必会 + 知识点汇总。+string +dfs +bfs等重要算法
- C++字符串对象(string)
- C++操作mysql数据库文章资料汇总
- C++字符串对象(string)
- 标准c++去 string 对象 所有空格%%%%%%%%%%去 左右空格代码,在网上找半天,不如自己写的好
- C++ STL 帮助文档 -- string
- CString/C++ string常用操作详解
- 对C++ STL,list元素的循环删除操作
- C++中处理string对象的字符
- C/C++ 中的一些字符操作函数(不是std::string)
- C++ 字符(char)与字符串(string)操作
- C++之对象操作事例
- C++:STL标准入门汇总
- C++中如何去掉std::string对象的首尾空格