C++中string类常见用法

string,主要用于字符串处理

 

1、字符串的输入

读入和输出整个字符串,只能用cin和cout

输入一个字符串s, 如果字符串中有空格 不能用cin,要使用getline(cin,s)

其中,getline()函数定义在<string>头文件中

 

2、字符/字符串与数值转换(C++11)

字符转化成int型用stoi(s[i])或者s[i]-'0'

stoi(s)将字符串转换成int型数值

 

将数值型转换成string型 用to_string

eg:to_string(num)将数值类型的变量转换成string类型

 

3、字符串的插入insert()

1)eg:s.insert(1,1,c);

向s的标号为1的位置插入1个字符c

 

2)eg:str1.insert(2,str2,0,4);

将str2脚标0开始的连续4个字符插入到str1脚标2开始的地方

 

4、字符串匹配查找find()

1)s1.find(s2[i])==string::nops 表示在s1中找不到s2[i]这个字符 返回nops

应用到两个字符串去重的问题中,可以定义string str  利用字符串的拼接将最后需要输出的内容全部存在str 直接输出即可

 

2)

string str;

int pos;

int index=s.find(string  str,  int  pos)

如果find()函数中除了有被找寻的字符串,还有一位整型数,表示从该位置开始遍历被搜索的字符串,已找到被找寻的字符串。返回的index是str在s中第一次出现的位置

 

类比:

map<string,bool>op

在map中 使用op.count(dem[i])==1在op中查找是否有key为dem[i]的元素

 

5、转换函数to_

tolower(char/int型变量),不能将整个string一起转换

 

6、跟string有关的头文件区分

#include <cstring>   //不可以定义string s;可以用到strcpy等函数

using   namespace   std;

 

#include <string>   //可以定义string s;可以用到strcpy等函数

using   namesapce   std;

 

#include <string.h>   //不可以定义string s;可以用到strcpy等函数

 

7、字符串长度

在字符串中length()函数和size()函数具有同样的效果

 

8、getchar()

定义在<stdio>头文件中

getline()之前需要用getchar()吸收空白符,清除缓存区

 

getchar函数功能:

从stdio流中读字符,相当于getc(stdin),它从标准输入里读取下一个字符。返回类型为int型,返回值为用户输入的ASCⅡ码,出错返回-1。

 

具体说明:

1)从缓冲区读走一个字符(相当于清除缓冲区);

2)前面的scanf()在读取输入时会在缓冲区中留下一个字符'\n'(输入完s[i]的值后按回车键所致),所以如果不在此加一个getchar()把这个回车符取走的话,gets()就不会等待从键盘键入字符,而是会直接取走这个“无用的”回车符,从而导致读取有误;

3)getchar()是在输入缓冲区顺序读入一个字符(包括空格、回车和Tab),getchar()使用不方便,解决方法: 

  • 使用下面的语句清除回车: while(getchar()!='\n'); 
  • 用getche()或getch()代替getchar(),其作用是从键盘读入一个字符(不用按回车),注意要包含头文件<conio.h>

 

9、gets()函数getline()

1)gets()是C中的函数,定义在stdio头文件 而不是string.h头文件

只能在遇到回车或者EOF结束输入 所以gets函数可以用于输入带有空格的字符串。

 eg:

char a[100];

gets(a);//gets函数可以直接获得一个数组

 

2)getline()是c++中的函数,包含在string头文件里, 与gets()函数功能相似,但是能自定义结束符。

 

10、strtok 分割字符串为一组字符串

1)要使用strtok函数需要包含头文件<string.h>

或者#include <cstring>

2)strtok函数的作用是把字符串以规定的字符分割开:

本质上是将字符串分段,并且除去间隔字符,进行存储

 eg:

char *p;

p = strtok(buf, "$");

p为指针,buf也是指针。这句代码的意思就是把buf中的字符串以"$"为分隔符分割开来,分割出来的字符串保存到指针p中。

 

3)再次调用strtok函数时,把buf换成NULL,不需要再写buf。已经分割掉的单位部分用buf字符串上脱落,strtok函数会把分割前的字符串破坏掉,即每次分割后,原来的字符串就会少掉一部分,完整性会被破坏。

p = strtok(NULL, "$");

 

4)p = strtok(buf, "$,");

这句代码的意思是以"$"和","为分隔符分割buf中的字符串。每当遇到这两个字符其中一个都会分割,不是遇到"$,"两个字符连在一起才分割

 

11、获得字符串的子串substr()

#include<string>

#include<iostream>

using namespace std;

int main()

{

  string s("12345asdf");

  string a = s.substr(0,5);//获得字符串s中从第0位开始的长度为5的字符串

  cout << a << endl;

}

输出结果为:12345

 

12、删除字符串的子串erase()

1)str.erase(pos,n); 删除从pos开始的n个字符,比如erase(0,1)就是删除第一个字符

 

2)去掉字符串的哪一个字符

s2.erase(s2.begin());  //去掉第一个元素

s2.erase(s2.end() - 1); //去掉最后一个元素  end()指向结尾的下一个

 

13、字符串替换函数replace

res[i].replace(pos1, s.length(), d.count(s) ? d[s] : "");

//字符串res[i]从pos1开始s.length()长的子串替换成d[s]或""

 

posted @ 2020-04-21 11:19  PennyXia  阅读(1065)  评论(0编辑  收藏  举报