string类常见用法

需要包含头文件和命名空间

#include<string>

using namespace std;

目录

1. 声明

2.string与C字符数组的比较

2.1、C风格字符串

2.1、C字符数组及其与string串的区别

2.3、string对象的操作

 

3.字符串操作函数

string类函数

4.int型与string型的互相转换


0.困惑点

关于在C++中 #include<string.h>   和  #include<cstring>   和  #include<string> 的区别?

结论:如果想要定义string,那么必须写上 using namespace std 和 #include <string>

如果想要使用strcat等函数就加上<cstring>或者<string.h>

详细解释可看:https://blog.csdn.net/weixin_42513339/article/details/89208031

strcat函数用法可看:https://blog.csdn.net/u013162035/article/details/78612407

PS:对于<string>和另外两个没有关系,不要混淆。

 

 

1. 声明

 string str; 

string类的构造函数和析构函数如下:

1)  string s;  // 生成一个空字符串s 
2)  string s(str) ; // 拷贝构造函数生成str的复制品 
3)  string s(str, stridx);  // 将字符串str内"始于位置stridx"的部分当作字符串的初值 
4)  string s(str, stridx, strlen) ; // 将字符串str内"始于stridx且长度顶多strlen"的部分作为字符串的初值 
5)  string s(cstr) ;  // 将C字符串(以NULL结束)作为s的初值 
6)  string s(chars, chars_len) ;  // 将C字符串前chars_len个字符作为字符串s的初值。 
7)  string s(num, ‘c’) ;  // 生成一个字符串,包含num个c字符 
8)  string s(“value”);  string s=“value”;  // 将s初始化为一个字符串字面值副本
9)  string s(begin, end);  // 以区间begin/end(不包含end)内的字符作为字符串s的初值 
10) s.~string();  //销毁所有字符,释放内存 

 

2.string与C字符数组的比较

string串要取得其中某一个字符,和传统的C字符串一样,可以用s[i]的方式取得。比较不一样的是如果s有三个字符,传统C的字符串的s[3]是’\0’字符,但是C++的string则是只到s[2]这个字符而已。

2.1、C风格字符串

  • 用”“括起来的字符串常量,C++中的字符串常量由编译器在末尾添加一个空字符;
  • 末尾添加了‘\0’的字符数组,C风格字符串的末尾必须有一个’\0’。

2.1、C字符数组及其与string串的区别

char ch[ ]={‘C’, ‘+’, ‘+’}; //末尾无NULL
char ch[ ]={‘C’, ‘+’, ‘+’, ‘\0’}; //末尾显式添加NULL
char ch[ ]=”C++”; //末尾自动添加NULL字符 若[ ]内数字大于实际字符数,将实际字符存入数组,其余位置全部为’\0’。 

è¿éåå¾çæè¿°

2.3、string对象的操作

string s;
1)  s.empty();  // s为空串 返回true
2)  s.size();  // 返回s中字符个数 类型应为:string::size_type
3)  s[n];  // 从0开始相当于下标访问
4)  s1+s2;  // 把s1和s2连接成新串 返回新串 
5)  s1=s2;  // 把s1替换为s2的副本
6)  v1==v2;  // 比较,相等返回true
7)  `!=, <, <=, >, >=`  惯有操作 任何一个大写字母都小于任意的小写字母

当进行string对象和字符串字面值混合连接操作时,+操作符的左右操作数必须至少有一个是string类型的:

string s1(“hello”);
string s3=s1+”world”;  //合法操作
string s4=”hello”+”world”;  //非法操作:两个字符串字面值相加

 

3.字符串操作函数

常见如:

字符串长度  (length)

string str = "478";

int len = str.length(); //len为3 

删除某个元素:

string str = "478";

str.erase(0,1);//第0号开始,删除1个元素

 

string类函数

  1. =, s.assign() // 赋以新值 
  2. swap() // 交换两个字符串的内容 
  3. +=, s.append(),s.push_back() // 在尾部添加字符 
  4. s.insert() // 插入字符 
  5. s.erase() // 删除字符 
  6. s.clear() // 删除全部字符 
  7. s.replace() // 替换字符 
  8. + // 串联字符串 
  9. ==,!=,<,<=,>,>=,compare() // 比较字符串 
  10.  size(),length() // 返回字符数量 
  11.  max_size() // 返回字符的可能最大个数 
  12.  s.empty() // 判断字符串是否为空 
  13.  s.capacity() // 返回重新分配之前的字符容量 
  14.  reserve() // 保留一定量内存以容纳一定数量的字符 
  15.  [ ], at() // 存取单一字符 
  16.  >>,getline() // 从stream读取某值 
  17.  << // 将谋值写入stream 
  18.  copy() // 将某值赋值为一个C_string 
  19.  c_str() // 返回一个指向正规C字符串(C_string)的指针 内容与本string串相同 有’\0’ 
  20.  data() // 将内容以字符数组形式返回 无’\0’ 
  21.  s.substr() // 返回某个子字符串 
  22.  begin() end() // 提供类似STL的迭代器支持 
  23.  rbegin() rend() // 逆向迭代器 
  24.  get_allocator() // 返回配置器

 

4.int型与string型的互相转换

4.1 int型转string型

 1.使用 to_string()函数

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string s;
	int a=30;
	s=to_string(a);   //这种会报错vs2010没有int型参数,必须强制转换long long
	s=to_string(long long(a));
        cout<<s<<endl;
    return 0;
}//输出:30

2.使用stringstream

#include<iostream>
#include<string>
#include<sstream>    //字符串流头文件
using namespace std;
int main(void)
{
    string s;
    stringstream ss;
    int a=30;
    ss<<a;
    ss>>s;
    cout<<s<<endl;
    cout<< ss.str() << endl; //或者利用字符串流的str函数获取流中的内容
    return 0;
}

在C++中更推荐使用流对象来实现类型转换,以上两个函数在使用时需要包含头文件 #include <sstream>

 

4.2 string型转int型

1.使用stringstream

#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main()
{
	string s="35";
	stringstream ss;
	int a;
	ss<<s;
	ss>>a;
	cout<<a<<endl;
    return 0;
}

2.stoi()函数(stoi/stol/stoll等等函数)

int stoi (const string&  str, size_t* idx = 0, int base = 10); //第一个为str输入,第二个默认0下标开始,第三个默认10进制
int stoi (const wstring& str, size_t* idx = 0, int base = 10);

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string s="35";
    int i = stoi(s);
    cout<<i;
    return 0;
}
//输出:35

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值