(C++)string类及其函数

简介: (C++)string类及其函数

愿所有美好如期而遇


标准库中的string类

string是对类模板实例化出的类型的重命名,也就是说string就是basic_string<char>这个类型。

string是表示字符串的字符串类

该类接口与常规类的接口基本相同,再添加了一些专门用来操作string的常规操作。

在使用string类时,需要使用using namespace std,或者部分展开。而且我们最好包含<string>的头文件,不是每个编译器都在<iostream>里包含了<string>的声明。(尽管我的编译器实现了)

string类的常用接口

string()                               无参构造,结果就是空字符串

string(const char* s)        用常量字符串构造

string(const string& s)     拷贝构造

string(size_t  n,char ch)   用n个字符ch构造

string类对象的容量操作

size/length  返回字符串的有效长度,\0是标识符,不属于有效字符

empty          检测字符串是否位空串,是返回true,否返回false

clear            清空字符串有效字符  

string类对象的访问以及遍历操作

operator[]      运算符重载

begin+end    begin获取第一个字符的迭代器,end获取最后一个有效字符的下一个位置的迭代器。

#include <iostream>
#include <string>
using namespace std;
int main()
{
  string s("I love you");
  for (int i = 0; i < s.size(); i++)
  {
    cout << s[i];
  }
  cout << endl;
  //底层是迭代器
  for (auto e : s)
  {
    cout << e;
  }
  cout << endl;
  string::iterator sit = s.begin();
  while (sit != s.end())
  {
    cout << *sit++;
  }
  cout << endl;
  return 0;
}

四个迭代器

iterator                              

const_terator

reverse_iterator

const_reverse_iterator

#include <iostream>
using namespace std;
int main()
{
  //iterator
  string s1("ai");
  string::iterator it1 = s1.begin();
  while (it1 != s1.end())
  {
    cout << *it1++;
  }
  cout << endl;
  //const iterator
  const string s2("const ai");
  string::const_iterator it2 = s2.begin();
  while (it2 != s2.end())
  {
    cout << *it2++;
  }
  cout << endl;
  //reverse iterator
  string s3("I love you");
  string::reverse_iterator it3 = s3.rbegin();
  while (it3 != s3.rend())
  {
    cout << *it3++;
  }
  cout << endl;
  //const_reverse_iterator
  string s4("hope");
  string::const_reverse_iterator it4 = s4.rbegin();
  while(it4 != s4.rend())
  {
    cout << *it4++;
  }
  cout << endl;
  return 0;
}

插入和删除

insert 可以从任意位置插入字符或者字符串

earse  可以从任意位置删除字符或者字符串

int main()
{
  string s = "haha";
  s.insert(0, "hello ");
  cout << s << endl;
  s.insert(0, 1, '?');
  cout << s << endl;
  s.insert(s.size(), 1, '?');
  cout << s << endl;
  string s1;
  s1.resize(16,'?');
  s.insert(s.size() / 2, s1);
  cout << s << endl;
  //迭代器
  s.insert(s.begin(), 'h');
  s.insert(s.begin(), '?');
  cout << s << endl;
  return 0;
}

int main()
{
  string s = "abcdefghijklmnopqrstuvwxyz";
  cout << s << endl;
  //从0位置开始删除1个字符
  s.erase(0, 1);
  cout << s << endl;
  //删除区间字符
  s.erase(s.end() - 3,s.end());
  cout << s << endl;
  //删除单个字符
  s.erase(s.end() - 3);
  cout << s << endl;
  //缺省,全部删除
  s.erase(0);
  cout << s << "NULL" << endl;
  return 0;
}

目录
相关文章
|
6天前
|
存储 编译器 C++
【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)
本文深入探讨了C++类的默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值重载。构造函数用于对象的初始化,析构函数用于对象销毁时的资源清理,拷贝构造函数用于对象的拷贝,赋值重载用于已存在对象的赋值。文章详细介绍了每个函数的特点、使用方法及注意事项,并提供了代码示例。这些默认成员函数确保了资源的正确管理和对象状态的维护。
29 4
|
7天前
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
25 4
|
1月前
|
Java
【编程基础知识】(讲解+示例实战)方法参数的传递机制(值传递及地址传递)以及String类的对象的不可变性
本文深入探讨了Java中方法参数的传递机制,包括值传递和引用传递的区别,以及String类对象的不可变性。通过详细讲解和示例代码,帮助读者理解参数传递的内部原理,并掌握在实际编程中正确处理参数传递的方法。关键词:Java, 方法参数传递, 值传递, 引用传递, String不可变性。
51 1
【编程基础知识】(讲解+示例实战)方法参数的传递机制(值传递及地址传递)以及String类的对象的不可变性
|
27天前
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
27天前
|
安全 Java 测试技术
Java零基础-StringBuffer 类详解
【10月更文挑战第9天】Java零基础教学篇,手把手实践教学!
24 2
|
30天前
|
存储 编译器 对象存储
【C++打怪之路Lv5】-- 类和对象(下)
【C++打怪之路Lv5】-- 类和对象(下)
27 4
|
30天前
|
编译器 C语言 C++
【C++打怪之路Lv4】-- 类和对象(中)
【C++打怪之路Lv4】-- 类和对象(中)
23 4
|
30天前
|
存储 安全 C++
【C++打怪之路Lv8】-- string类
【C++打怪之路Lv8】-- string类
21 1
|
1月前
|
存储 编译器 C语言
【C++打怪之路Lv3】-- 类和对象(上)
【C++打怪之路Lv3】-- 类和对象(上)
16 0
|
1月前
|
存储 编译器 C++
【C++类和对象(下)】——我与C++的不解之缘(五)
【C++类和对象(下)】——我与C++的不解之缘(五)

热门文章

最新文章