string常用函数

1、构造函数

string(const char *s); //用c字符串s初始化

string(int n,char c); //用n个字符c初始化

string类还支持默认构造函数和复制构造函数,如string s1;string s2="hello"

2、删除 erase
有三种用法
(1)erase(pos,n); 删除从pos开始的n个字符,比如erase(0,1)就是删除第一个字符
(2)erase(position);删除position处的一个字符(position是个string类型的迭代器)
(3)erase(first,last);删除从first到last之间的字符(first和last都是迭代器)

string str ="This is an example phrase.";
string::iterator it;

// 第(1)种用法
str.erase (10,8);
cout << str << endl; // "This is an phrase."

// 第(2)种用法
it=str.begin()+9;
str.erase (it);
cout << str << endl; // "This is a phrase."

// 第(3)种用法
str.erase (str.begin()+5, str.end()-7);
cout << str << endl; // "This phrase."

3、查找
https://blog.csdn.net/MakerCloud/article/details/88929516

1)find_first_not_of() 查找当前string与指定的字符串中任意一个字符都不相符的字符,并返回该字符在字符串中第一次出现的位置。

size_t find_first_not_of ( const string& str, size_t pos = 0 ) const;
size_t find_first_not_of ( const char* str, size_t pos, size_t n ) const;
size_t find_first_not_of ( const char* str, size_t pos = 0 ) const;
size_t find_first_not_of ( char ch, size_t pos = 0 ) const;

2) find_first_of() 搜索字符串中属于任意一个str、s或c的字符,并返回字符串中第一个出现的位置。

size_t find_first_of ( const string& str, size_t pos = 0 ) const;
size_t find_first_of ( const char* s, size_t pos, size_t n ) const;
size_t find_first_of ( const char* s, size_t pos = 0 ) const;
size_t find_first_of ( char ch, size_t pos = 0 ) const;

3) find()
1)、查找字母或子串在母串中出现的位置,找不到返回特殊标记npos
if(str.find(ch)!=string::npos){ //查找单个字符
cout<<str.find(ch)<<endl;
}
注意:返回的结果是匹配到的字符的第一个位置,如果有多个字符都可以匹配,那么只会返回第一个

若要找出所有出现的位置请使用
vector<string>& words
for (string word : words) {
int pos = s.find(word);
while ((pos = s.find(word, pos)) != string::npos) {
for (int i = pos; i < pos + word.size(); i++) {
isBold[i] = true;
}
pos++;
}
}

2)、返回子串首次和最后出现的位置
find_first_of()
find_last_of()

3)、查找某一给定位置后的子串位置
int position=s.find("ab", 5); //从字符串s 下标5的位置开始找子串“ab”

4、字符串拼接
用+=
string funOfEmail(string s){
int idnex=s.find('@');
string res;
//res=(isupper(s[0])? (s[0]+32):s[0]) + "*****" +(isupper(s[idnex-1])? (s[idnex-1]+32):s[idnex-1]) + s[idnex]; //这种写法是错误的
res+=isupper(s[0])? (s[0]+32):s[0];
res+="*****";
res+=isupper(s[idnex-1])? (s[idnex-1]+32): s[idnex-1];
res+=s[idnex];
for(int i=idnex+1;i< s.length();i++) {
if(isupper(s[i]))
res+= s[i]+32;
else
res+=s[i];
}
return res;
}

注:大小写转换 :大写转小写 直接加32

5、返回子串
s.substr(pos, n) 返回一个string,包含s中从pos开始的n个字符(pos的默认值是0,n的默认值是s.size() - pos,即不加参数会默认拷贝整个s)

6、逆序(反转)
使用reverse 需包含头文件#include <algorithm>
string str="hello world , hi";
reverse(str.begin(),str.end());

7、返回子串 substr

假设:string s = “0123456789”;
string sub1 = s.substr(5);     //只有一个数字5表示从下标为5开始一直到结尾:sub1 = “56789”
string sub2 = s.substr(5, 3);  //从下标为5开始截取长度为3位:sub2 = “567”

8、输入输出

#include<iostream>
using namespace std;
int n;
cin>>n;
cout<< n<<endl;

字符串
注意:cin提取始终将空格(空格,制表符,换行符...)视为终止要提取的值,因此提取字符串意味着始终提取单个单词,而不是短语或整个句子。
cin>>s

整行字符串输入使用getline()
string s;
while(getline(cin, s)) {

}

字符串流
#include<sstream>
stringstream

格式化输出
包含头文件 : #include<iomanip>
cout<<setiosflags(ios::fixed)<<setprecision(2);合在一起的意思就是输出一个右对齐的小数点后两位的浮点数。

1) 使用setprecision(n)可控制输出流显示浮点数的数字个数 C++默认的流输出数值有效位是6。setprecision(n)就是输出n个数,会有四舍五入。
2) setiosflags(ios::fixed)
setprecision(n)与setiosflags(ios::fixed)合用,可以控制小数点右边的数字个数。

eg:
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int main() {
double s=20.7843000;
cout << s << endl;
cout << setiosflags( ios::fixed );
cout << "setprecision( 1 )"<< setprecision( 1 )<< s << endl;
cout << "setprecision( 2 )"<< setprecision( 2 )<< s << endl;
cout << "setprecision( 3 )"<< setprecision( 3 )<< s << endl;
cout << "setprecision( 4 )"<< setprecision( 4 )<< s << endl;
cout << "setprecision( 5 )"<< setprecision( 5 )<< s << endl;
cout << "setprecision( 6 )"<< setprecision( 6 )<< s << endl;
cout << "setprecision( 7 )"<< setprecision( 7 )<< s << endl;
cout << "setprecision( 8 )"<< setprecision( 8 )<< s << endl;
return 0;

}

输出:

20.7843:
setprecision( 1 )20.8
setprecision( 2 )20.78
setprecision( 3 )20.784

9、整数与字符串之间的转换

1)整数转换为字符串 to_string()

int n;

string s = to_string(n);  //将整数转换为字符串

2)字符串转整数

string s="1234";

int val=stoi(s);

注意:

stoi函数默认要求输入的参数字符串是符合int范围的[-2147483648, 2147483647],否则会runtime error。
atoi函数则不做范围检查,若超过int范围,则显示-2147483648(溢出下界)或者2147483647(溢出上界)。
stoi头文件:<string>,c++函数
atoi头文件:<cstdlib>,c函数

int main()
{
string s1 = "21474839", s2 = "-214748";
char *s3 = "214748666666663", *s4 = "-21474836488";
cout << stoi(s1) << endl;
cout << stoi(s2) << endl;
cout << atoi(s3) << endl;
cout << atoi(s4) << endl;
return 0;
}

STL中的string的更多相关文章

  1. 请用c++ 实现stl中的string类,实现构造,拷贝构造,析构,赋值,比较,字符串相加,获取长度及子串等功能。

    1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 class String{ 5 public ...

  2. C++标准模板库(STL)之String

    1.String的常用用法 在C语言中,使用字符数组char str[]来存字符串,字符数组操作比较麻烦,而且容易有'\0'的问题,C++在STL中加入string类型,对字符串常用的需求功能进行封装 ...

  3. STL中的set容器的一点总结

    1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构 ...

  4. C++中关于string类型究竟能不能用cout输出的问题

    先让我讲下故事哈 一次在MFC中用cout输出一个string类型字符串,编译时出现这样一个错误: error C2679: binary '<<' : no operator defin ...

  5. 【转】 STL中的set容器的一点总结

    1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构 ...

  6. C++ STL中Map的按Key排序和按Value排序

    map是用来存放<key, value>键值对的数据结构,可以很方便快速的根据key查到相应的value.假如存储学生和其成绩(假定不存在重名,当然可以对重名加以区 分),我们用map来进 ...

  7. (转)STL中set的用法

    转载自here 1.关于set map容器是键-值对的集合,好比以人名为键的地址和电话号码.相反地,set容器只是单纯的键的集合.例如,某公司可能定义了一个名为bad_checks的set容器,用于记 ...

  8. C++中的string类(1)

    http://blog.sina.com.cn/s/blog_51409e8f01009h7g.html 前言: string 的角色1 string 使用1.1 充分使用string 操作符1.2 ...

  9. STL中map与hash_map容器的选择收藏

    这篇文章来自我今天碰到的一个问题,一个朋友问我使用map和hash_map的效率问题,虽然我也了解一些,但是我不敢直接告诉朋友,因为我怕我说错了,通过我查询一些帖子,我这里做一个总结!内容分别来自al ...

随机推荐

  1. Codeforces 909E(Coprocessor,双队列维护)

    题意:给出n个待处理的事件(0 ~n-1),再给出了n个标(0表示只能在主处理器中处理这个事件,1表示只能在副处理器中处理这个事件),处理器每次能处理多个任务.每个事件有关联,如果一个任务要在副处理器 ...

  2. 复变函数-MINDMAPS-continuous updating

  3. SpringBoot2.x整合quartz实现多任务定时执行

    一.pom文件中导入相关依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifa ...

  4. dockerfile定制docker的脚本文件

    Dockerfile文件详解 #指定操作系统 FROM scratch #制作base image 基础镜像,尽量使用官方的image作为base image FROM centos #使用base ...

  5. 朱刘算法 有向图定根的最小生成树poj3164

    关于为什么不能用Prim求解此类问题,如下 Prim可以看成是维护两个顶点集或者看成维护一颗不断生成的树(感觉前一种说法好一点) 倘若是有向图有三个顶点1.2.3 边的情况如下 1->2:    ...

  6. SXSSFWorkbook的简单使用

    在工作中使用到SXSSFWorkbook来导出Excel,写一篇博客记录一下SXSSFWorkbook的使用方法 1.介绍 SXSSFWorkbook是属于apache基金会的Excel导出工具类,从 ...

  7. UPD链接实现稳健传输案例

    使用的类    DatagramSocket  用于发送数据和接收数据    此类的构造方法:        DatagramSocket();        DatagramSocket(端口号); ...

  8. 转 vue动画总结

    使用过渡类名(有进入及出去,适合显示隐藏,需要配合v-if) .v-enter,//进入前 .v-leave-to {//离开后 只需要入场动画 可以把v-leave-to删掉 opacity: 0; ...

  9. NodeJS——大汇总(一)(只需要使用这些东西,就能处理80%以上业务需求,全网最全node解决方案,吐血整理)

    一.前言 本文目标 本文是博主总结了之前的自己在做的很多个项目的一些知识点,当然我在这里不会过多的讲解业务的流程,而是建立一个小demon,旨在帮助大家去更加高效 更加便捷的生成自己的node后台接口 ...

  10. 读Pyqt4教程,带你入门Pyqt4 _006

    窗口组件是应用程序的基本构建块.PyQt4编程工具包拥有范围广泛的各种窗口组件.按钮.选择框.滑块.列表框等等,程序员工作所需要的一切.在教程的这部分中,我们将介绍一些有用的窗口组件. QCheckB ...