C++中string用法

    使用时引入头文件#include<string>。

一、基础概念

本质:      

String的本质是一个类。

String与char*区别:

  • char*是一个指针
  • String是一个类,类内部封装了char*,管理这个字符串,是一个char*型的容器

特点:

String管理char*所分配的内存,无需担心复制越界和取值越界等,由类内部进行负责

1.1string的构造函数

string构造函数原型为:

string();//创建一个空的字符串,String str
string(const char *s);///使用字符串s初始化
string(const string& str);///使用一个string对象初始化另一个String对象
string(int n,char c);///使用n个字符c初始化 string str(4,'c')

二、初始化

有两种方式,使用等号的是拷贝初始化,不使用等号的是直接初始化

1)string str1="hello world";

2)string str2("hello world");

3)string str3=str1;

4)string str4(str2);

5)string str5(10,'a');

cin>>str;//输入字符串
1) str.push_back('s');//添加一个字符
2) str.pop_back();//删除一个字符
3) str='0'+str;//字符串前面加0
4) str=“000000”+str;//字符串前面加一串0
5) str=str+'0';//字符串后面加0

三、常用操作

1)获取长度

str.length();

str.size();//均可以,不包括'\0'

2)反转字符串

reverse(str.begin(),str.end());

3)查找,判断子串

查找字符串第一次出现的位置

str.find(str1);//返回的是str1在str中第一次出先的位置,如果失败,返回-1或string::npos(string::npos的默认值也是-1)

函数原型如下:

int find(const string& str,int pos=0) const;///查找当前字符串中str第一次出现的位置
int find(const char* s,int pos=0)const;///查找s在当前字符串第一次出现的位置,默认从0开始
int find(const char* s,int pos,int n) const;///从pos位置开始查收字符串s的前n个字符
int find(const char c,int pos=0);///查找字符c第一次出现的位置

如下:

string a="abc";
string b="123";
string::size_type idx;
idx=a.find(b);
if(idx==string::npos)
   cout<<"not found"<<endl;

查找字符串最后一次出现的位置。函数原型为:

int rfind(const string &str,int pos=npos)const;///查找str最后一次出现的位置,从pos开始
int rfind(const,char* s,int pos=npos)const;///查找s最后一次出现的位置,从pos开始
int rfind(const char* s,int pos,int n) const;///从pos开始查找s的前n个字符最后一次出现的位置
int rfind(const char c,int pos=0)const;///查找字符c最后一次出现的位置

4)数值转化

string str=to_string(val);//把val转化成string

int num=stoi(str,p,b);//把字符串s从p处开始转化为b进制的int

long num=stol(str,p,b);//把字符串s从p处开始转化为b进制的long

unsigned long num=stoul(str,p,b);//把字符串s从p处开始转化为b进制的unsigned long

long long num=stoll(s,p,b);//把字符串s从p处开始转化为b进制的long long

unsigned long long num=stoull(s,p,b);//把字符串s从p处开始转化为b进制的unsigned long long

flaot num=stof(s,p);//把字符串s从p处开始转为float

double num=stod(s,p);//把字符串从p处开始转化为double

long double num=stold(s,p);//把字符串s从p处开始转为long double

5)复制子串

string str=s.substr(i,j);//从字符串s的第i位开始长度为j的字符串复制给str

string str=s.substr(i);//将字符串s从i开始到结束复制给str

6)判断空

s.empty();//判断字符串是否为空

7)删除和清空

s.clear();//删除全部字符

s.erase(2,3);//从位置2开始删除3个字符

8)字符串比较大小

字符串比较按照字符的ASCII码进行比较,=返回0;>返回1;<返回-1。函数原型为:

int compare(const string &s)const;///与字符串s比较
int compare(const char *s) cosnt;///与字符串s比较

9)替换

替换的函数原型如下:

string& replace(int pos,int n,const string& str);///从当前字符串pos开始的n个字符替换为str
string& replace(int pos,int n,const char* s);///替换从pos开始的n个字符为字符串s

10)调整字符串大小

s.resize(num);//重新调整字符串的大小为count

如s="abcd"

s.resize(2);//字符串变短,现在只有2个字符

s.resize(6,'b');//字符串变长,则需要为多余的赋值,此时字符串为abcdbb

11)字符串赋值操作

赋值的函数原型

string& operator=(const char* s);///char*类型字符串赋值给当前字符串
string& operator=(const string &s);///把字符串s赋值给当前字符串
string& operator=(char c);///字符赋值给当前字符串
string& assign(const char *s);///把字符串s赋给当前的字符串
string& assign(const char *s,int n);///把字符串s的前n个字符赋给当前字符串
string& assign(const string &s);///把字符串s赋值给当前字符串
string& assign(int n,char c);///用n个字符c赋给当前字符串  

12)字符串拼接

在字符串末尾追加字符串。函数原型为:

string& operator+=(const char *str);///重载+=操作符,字符串后拼接str
string& operator+=(const char c);///
string& operator+=(const string& str);
string& append(const char *s);///字符串s连接到当前字符串结尾
string& append(const char *s,int n);//字符串s的前n个字符连接到当前字符串末尾
string& append(const string& s);///把字符串s追加到当前字符串末尾
string& append(const string &s,int pos,int n);//字符串s从pos开始的n个字符追加到当前字符串末尾

13)字符串存取

String中单个字符存取方式有2种:

char& operator[](int n);///通过[]方式取字符
char& at(int n);///通过at方法取字符

示例为:

string str="hello world";
str[0]='x';   //此时字符串为xello world
str.at[1]='w';   //此时字符串为xwllo world

14)字符串插入

对字符串进行插入和删除操作的函数原型为:

string& insert(int pos,const char* s);///插入字符串
string& insert(int pos,const string& str);//插入字符串
string& insert(int pos,int n,char c);//在指定位置插入n个字符c

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值