C++ string类

class std::String

String class

typedef basic_string string

     std::string是basic_string模板类的使用char作为类型的类实例,这种类处理字节与其所使用的编码无关:如果处理的是多字节可变长度的字符(比如UTF-8),该类中所有的成员(比如长度和大小),以及迭代器依然会按照字节来操作。
typedef basic_string string
成员类型定义
value_type(迭代器所指对象的型别)char
traits_type(特化类型)char_traits
allocator_type (类型化内存分配以及对象的分配和撤销)allocator
reference 容器中某元素属性的引用类型char&
const referenceconst char &
pointerchar*
const_pointerconst char*
iterator一个随机存取的字符迭代器(可以转化为常迭代器)
const_iterator一个随机存取的常字符迭代器
reverse_iterator 反向迭代器reverse_iterator
const_reverse_iterator 常反向迭代器reverse_iterator
difference_type 描述序列(容器)中两个元素地址之间差异的 有符号整数类型ptrdiff_t
size_type描述序列长度的无符号整数类型size_t
成员函数
  • 构造函数
  • 析构函数
  • operator=
迭代器
 对应iterator:
     begin
     end
 对应reverse iterator
     rbegin
     rend
 对应const iterator
     cbegin
     cend
 对应const_reverse_iterator
     crbegin
     crend
capacity
  • size
  • length
  • max_size
  • resize
  • capacity
  • reverse
  • clear
  • empty
  • shirink_to_fit
元素读取
  • operator[]
  • at
  • back
  • front
字符串编辑器
  • operator+=
  • append
  • push_back append character
  • assign assign content to string
  • insert
  • erase
  • replace
  • swap
  • pop_back delete last characters
字符串操作
  • c_str
  • data
  • get_allocator
  • copy
  • find
  • rfind 找到字符最后一次出现的位置
  • find_first_of
  • find_last_of
  • find_first_not_of
  • find_last_not_of
  • substr
  • compare
成员常量

npos size_t所能取到的最大值
static const size_t npos =- 1

函数重载
  • operator+=
  • relation operators 例如== <= >= !=等等
  • swap 交换string对象的值
  • operator>>字符串提取符
  • operator<<字符串插入符
  • getline 从输入流中提取一行形成string对象

进一步探讨string类成员函数

data()和c_str

const char* data( ) const;
const char* c_str() const;
string类中间可能带’\0’;
string::c_str带’\0’,而string::data不带’\0’;
不要试图通过c_str()和data()返回指针来改变string内容;

assign()替换当前string 内容

string& assign ( const string& str );
string& assign ( const string&, size_t pos, size_t n );
string& assign ( const char* s, size_t n );
string& assign ( const char* s );
string& assign ( size_t n, char c );
template <class InputIterator>
   string& assign ( InputIterator first, InputIterator last );
erase() erases a part of the string contents
 string& erase ( size_t pos = 0, size_t n = npos );
iterator erase ( iterator position );
iterator erase ( iterator first, iterator last );
push_back() 添加单独一个字符到string的内容中
// string::push_back
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main ()
{
  string str;
  ifstream file ("test.txt",ios::in);
  while (!file.eof())
  {
    str.push_back(file.get());
  }
  cout << str;
  return 0;
}

capacity()容量/reverse()预留空间/resize()
size_t capacity ( ) const;//Returns the size of the allocated storage space in the string object.



void reserve ( size_t res_arg=0 );//Request a change in capacity 重新分配容量给string对象


void resize ( size_t n, char c );//c是填补用的字符
void resize ( size_t n );//Resizes the string content to n characte.
如果n>std::max_size 会抛出异常
copy()/replace()/insert()
size_t copy ( char* s, size_t n, size_t pos = 0) const;

string& replace ( size_t pos1, size_t n1,   const string& str );
string& replace ( iterator i1, iterator i2, const string& str );

string& replace ( size_t pos1, size_t n1, const string& str, size_t pos2, size_t n2 );

string& replace ( size_t pos1, size_t n1,   const char* s, size_t n2 );
string& replace ( iterator i1, iterator i2, const char* s, size_t n2 );

string& replace ( size_t pos1, size_t n1,   const char* s );
string& replace ( iterator i1, iterator i2, const char* s );

string& replace ( size_t pos1, size_t n1,   size_t n2, char c );
string& replace ( iterator i1, iterator i2, size_t n2, char c );

template<class InputIterator>
   string& replace ( iterator i1, iterator i2, InputIterator j1, InputIterator j2 );

 string& insert ( size_t pos1, const string& str );
 string& insert ( size_t pos1, const string& str, size_t pos2, size_t n );
 string& insert ( size_t pos1, const char* s, size_t n);
 string& insert ( size_t pos1, const char* s );
 string& insert ( size_t pos1, size_t n, char c );
iterator insert ( iterator p, char c );
    void insert ( iterator p, size_t n, char c );
template<class InputIterator>
    void insert ( iterator p, InputIterator first, InputIterator last );
find()/rfind()/find_first_of()/find_last_of()/find_first_not_of()/find_last_not_of()
size_t find ( const string& str, size_t pos = 0 ) const;
size_t find ( const char* s, size_t pos, size_t n ) const;
size_t find ( const char* s, size_t pos = 0 ) const;
size_t find ( char c, size_t pos = 0 ) const; 
//rfind()是找到字符串最后一次出现的位置
// string::find
#include <iostream>
#include <string>
using namespace std;

int main ()
{
  string str ("There are two needles in this haystack with needles.");
  string str2 ("needle");
  size_t found;

  // different member versions of find in the same order as above:
  found=str.find(str2);
  if (found!=string::npos)
    cout << "first 'needle' found at: " << int(found) << endl;

  found=str.find("needles are small",found+1,6);
  if (found!=string::npos)
    cout << "second 'needle' found at: " << int(found) << endl;

  found=str.find("haystack");
  if (found!=string::npos)
    cout << "'haystack' also found at: " << int(found) << endl;

  found=str.find('.');
  if (found!=string::npos)
    cout << "Period found at: " << int(found) << endl;

  // let's replace the first needle:
  str.replace(str.find(str2),str2.length(),"preposition");
  cout << str << endl;

  return 0;
}


----------
size_t find_last_of ( const string& str, size_t pos = npos ) const;
size_t find_last_of ( const char* s, size_t pos, size_t n ) const;
size_t find_last_of ( const char* s, size_t pos = npos ) const;
size_t find_last_of ( char c, size_t pos = npos ) const;
/*
 *  从string对象内容的结尾开始找出匹配属于c,str或者string的任意其中
 *一部分最后一次出现的位置
 */

 // string::find_last_of
#include <iostream>
#include <string>
using namespace std;

void SplitFilename (const string& str)
{
  size_t found;
  cout << "Splitting: " << str << endl;
  found=str.find_last_of("/\\");
  cout << " folder: " << str.substr(0,found) << endl;
  cout << " file: " << str.substr(found+1) << endl;
}

int main ()
{
  string str1 ("/usr/bin/man");
  string str2 ("c:\\windows\\winhelp.exe");

  SplitFilename (str1);
  SplitFilename (str2);

  return 0;
}

//find_first_of()和find_first_not_of()/find_last_not_of()与find_last_of()类似
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值