C++——string使用

这篇具有很好参考价值的文章主要介绍了C++——string使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

string的常见构造接口 

string()

构造空的srting类对象,空字符串

string(const char* str)

用字符串初始化

string(const string& str) 拷贝构造,使用string类初始化
string(size_t n, char c)  用n个字符c初始化
string s1; 
string s2("hello world");
string s3(s2); 
string s4(10,'*');

string类对象的容量操作

size 返回字符串有效长度
capacity 返回总空间大小
empty 判断对象是否为空
clear 清空有效字符
reserve 为字符串预留空间
resize 修改有效字符个数

size——返回字符串的有效长度

std::string::size
size_t size() const;
int main ()
{
  std::string str ("Test string");
  std::cout << "The size of str is " << str.size() << " bytes.\n";
  return 0;
}
//The size of str is 11 bytes

 capacity——返回空间总大小

std::string::capacity
size_t capacity() const;
int main ()
{
  std::string str ("Test string");
  std::cout << "size: " << str.size() << "\n";
  std::cout << "capacity: " << str.capacity() << "\n";
  return 0;
}

//size: 11
//capacity: 15

 empty——判断对象是否为空

std::string::empty
bool empty() const;

应用:将用户输入的内容逐行读取并存储,直到遇到空行 

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string line;
	string content;
	do
	{
		getline(cin, line);
		content += line + '\n';
	} while (!line.empty());
	cout << content;
}

clear——清空有效字符

std::string::clear
void clear();
#include<iostream>
#include<string>
using namespace std;
int main()
{
	string str("hello world");
	str.clear();
	if (str.empty())
		cout << "string has been deleted" << endl;
}

clear只改清空数据,不改变空间大小 

reserve——为字符串预留空间

std::string::reserve
void reserve (size_t n = 0);
int main()
{
	string str("hello world");
	cout << str.capacity() << endl;
	cout << str.size() << endl;
	str.reserve(100);
	cout << str.capacity() << endl;
	cout << str.size() << endl;
}

 当参数n小于字符串大小时,不会缩小容量

resize——修改有效字符个数

std::string::resize
void resize (size_t n);void resize (size_t n, char c);

当n大于字符串大小时,多的空间会用字符c来填充(\0不会被覆盖) ,如果c缺省会自动补\0;如果n小于字符串大小时,会将多出的字符直接删除,但是不会改变基层空间capacity

int main()
{
	string str;
	str.resize(1);
	cout << str << endl;
	str.resize(5, '+');
	cout << str << endl;//字符串是 \0++++ 不同编译器输出可能不同
	str.resize(1);
	cout << str << endl;
}

string类对象的访问及遍历

operator[ ] 下标方式访问,类似数组
begin,end 迭代器顺序遍历
rbegin,rend 迭代器逆序遍历
范围for 底层还是迭代器
c_str 返回c格式字符串

operator[ ]——[ ]的运算符重载

std::string::operator[]
char& operator[] (size_t pos);const char& operator[] (size_t pos) const;

使用和数组类似,都是访问[ ]内数字下标位置的字符

int main()
{
	string str("hello world");
	for (int i = 0; i < str.size(); i++)
	{
		cout << str[i];
	}
	cout << endl;
}

迭代器begin和end,顺序遍历

iterator begin();const_iterator begin() const;
iterator end();const_iterator end() const;
using namespace std;

int main()
{
	string str("hello world");
	string::iterator sit = str.begin();
	while (sit != str.end())
	{
		cout << *sit;
		sit++;
	}
	cout << endl;
}

迭代器rbegin和rend,逆序遍历

reverse_iterator rbegin();const_reverse_iterator rbegin() const;
reverse_iterator rend();const_reverse_iterator rend() const;
using namespace std;

int main()
{
	const string str("hello world");
	string::const_reverse_iterator sit = str.rbegin();
	while (sit != str.rend())
	{
		cout << *sit;
		sit++;
	}
	cout << endl;
}

范围for(底层使用迭代器)

int main()
{
	const string str("hello world");
	for (char c : str)
	{
		cout << c;
	}
	cout << endl;
}

c_str——返回c格式字符串

std::string::c_str

const char* c_str() const;
int main()
{
	string str("hello world");
	const char* ch = str.c_str();
	cout << ch << endl;
}

 这个接口是为了和c语言更好兼容


string类对象的修改

append 追加字符串
operator+=

追加字符串

find 从前寻找字符(串)并返回下标位置
rfind 从后寻找字符(串)并返回下标位置
substr 从字符串中截取子串

append——追加字符串

std::string::append
	
//追加str
string& append (const string& str);
	
//追加str的子串,字串是从str的subpos下标位置开始,向后的sublen个字符
string& append (const string& str, size_t subpos, size_t sublen);

//追加常量字符串s
string& append (const char* s);
	
//追加常量字符串的前n个字符
string& append (const char* s, size_t n);
	
//追加n个字符c
string& append (size_t n, char c);

//迭代器追加
template <class InputIterator>   string& append (InputIterator first, InputIterator last);
#include <iostream>
#include <string>

int main ()
{
  std::string str;
  std::string str2="Writing ";
  std::string str3="print 10 and then 5 more";

  // used in the same order as described above:
  str.append(str2);                       // "Writing "
  str.append(str3,6,3);                   // "10 "
  str.append("dots are cool",5);          // "dots "
  str.append("here: ");                   // "here: "
  str.append(10,'.');                    // ".........."
  str.append(str3.begin()+8,str3.end());  // " and then 5 more"
  str.append(5,'.');                // "....."

  std::cout << str << '\n';
  return 0;
}
//Writing 10 dots here: .......... and then 5 more.....

operator+= ——追加字符串

std::string::operator+=
	
string& operator+= (const string& str);
	
string& operator+= (const char* s);
	
string& operator+= (char c);

+=运算符重载和append的功能基本相同,append除此之外可以使用迭代器,插入指定数量的字符,但是+=使用更方便

find——从前寻找字符(串)并返回下标位置

std::string::find

size_t find (const string& str, size_t pos = 0) const;	
size_t find (const char* s, size_t pos = 0) const;
size_t find (const char* s, size_t pos, size_t n) const;
size_t find (char c, size_t pos = 0) const;

rfind——从后寻找字符(串)并返回下标位置

string::npos是一个静态无符号整型变量,大小为-1(即最大的无符号整数)

std::string::rfind

size_t rfind (const string& str, size_t pos = npos) const;	
size_t rfind (const char* s, size_t pos = npos) const;
size_t rfind (const char* s, size_t pos, size_t n) const;	
size_t rfind (char c, size_t pos = npos) const;

rfind如果未给出查找的起始位置,或者起始位置下标越界,会从字符串末尾开始寻找;rfind和find一样,如果未找到目标,就会返回npos

substr——从字符串中截取子串

std::string::substr
string substr (size_t pos = 0, size_t len = npos) const;

如果pos等于字符串大小,就会返回空字符串;如果pos大于字符串大小,就会抛异常

#include <iostream>
#include <string>

int main ()
{
  std::string str="We think in generalities, but we live in details.";

  std::string str2 = str.substr (3,5);     // "think"

  std::size_t pos = str.find("live");      // position of "live" in str

  std::string str3 = str.substr (pos);     // get from "live" to the end

  std::cout << str2 << ' ' << str3 << '\n';

  return 0;
}

string类的非成员函数

operator+ 效率低,少用
operator+= 追加字符(串)
operator>>,operator<< 输入输出运算符重载

getline

获取一行字符串
relational operators 大小比较

operator+

std::operator+ (string)

string operator+ (const string& lhs, const string& rhs);	

string operator+ (const string& lhs, const char*   rhs);
string operator+ (const char*   lhs, const string& rhs);

string operator+ (const string& lhs, char          rhs);
string operator+ (char          lhs, const string& rhs);

这个函数是传值返回,需要深拷贝,效率低少用为好

operator+=前面提到过

operator<<和operator>>

输入输出运算符重载,使用很简单,遇到空格或者换行结束文章来源地址https://www.toymoban.com/news/detail-692175.html

getline——获取一行字符串

std::getline (string)

istream& getline (istream& is, string& str, char delim);//读到delim字符结束

istream& getline (istream& is, string& str);//读到'\n'结束

relational operators——大小比较

relational operators (string)

bool operator== (const string& lhs, const string& rhs);
bool operator== (const char*   lhs, const string& rhs);
bool operator== (const string& lhs, const char*   rhs);

bool operator!= (const string& lhs, const string& rhs);
bool operator!= (const char*   lhs, const string& rhs);
bool operator!= (const string& lhs, const char*   rhs);

bool operator<  (const string& lhs, const string& rhs);
bool operator<  (const char*   lhs, const string& rhs);
bool operator<  (const string& lhs, const char*   rhs);

bool operator<= (const string& lhs, const string& rhs);
bool operator<= (const char*   lhs, const string& rhs);
bool operator<= (const string& lhs, const char*   rhs);

bool operator>  (const string& lhs, const string& rhs);
bool operator>  (const char*   lhs, const string& rhs);
bool operator>  (const string& lhs, const char*   rhs);
	
bool operator>= (const string& lhs, const string& rhs);
bool operator>= (const char*   lhs, const string& rhs);
bool operator>= (const string& lhs, const char*   rhs);
#include <iostream>
#include <vector>

int main ()
{
  std::string foo = "alpha";
  std::string bar = "beta";

  if (foo==bar) std::cout << "foo and bar are equal\n";
  if (foo!=bar) std::cout << "foo and bar are not equal\n";
  if (foo< bar) std::cout << "foo is less than bar\n";
  if (foo> bar) std::cout << "foo is greater than bar\n";
  if (foo<=bar) std::cout << "foo is less than or equal to bar\n";
  if (foo>=bar) std::cout << "foo is greater than or equal to bar\n";

  return 0;
}

到了这里,关于C++——string使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++ String类的基本使用

            放弃时间的人,时间也会放弃他。——莎士比亚 ; 本篇章是关于string类内一些函数的介绍以及使用方法,都是我们编程必须掌握的基础! ​ 全文共7000字左右. 话不多说安全带系好,发车啦 (建议电脑观看) 。 附:红色,部分为重点部分;蓝颜色为需要记忆的

    2024年02月09日
    浏览(35)
  • C++第十六弹---string使用(上)

    ✨ 个人主页:   熬夜学编程的小林 💗 系列专栏:   【C语言详解】   【数据结构详解】 【C++详解】 目录 1、标准库中的string类    1.1、string类的常用接口说明 1.1.1、string类对象的常见构造 1.1.2、string类对象的容量操作  1.1.3、string类对象的访问及遍历操作 总结 根据前面一

    2024年04月12日
    浏览(31)
  • C++ [STL之string的使用]

    本文已收录至《C++语言》专栏! 作者:ARMCSKGT 字符串在程序中经常出现,C语言为此提供了很多字符串操作函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问,于是STL单独为字符串实现了一个容器,

    2024年02月01日
    浏览(34)
  • 【C++】——string的功能介绍及使用

    前言: 在上期,我们简单的介绍了关于 模板和STL ,今天我就带领大家学习一下关于 【string】类。本期,我们主要讲解的是关于 【string】的基本介绍以及【string】类的常用接口说明。有了以上的基本认识之后,在下期,我们将模拟实现一个【string】类。 目录 (一)为什么学

    2024年02月04日
    浏览(43)
  • 【C++杂货铺】string使用指南

    2024年02月14日
    浏览(45)
  • C++ 带你吃透string容器的使用

    接下来我们就要正式进入C++中STL的学习当中了 今天我们介绍的是STL中的string容器 我们对于STL的学习可以借助文档去学习: 我们今天就要通过cplusplus这个网站来介绍string容器 首先我们要了解的是: 什么是string容器? 注意:使用string容器需要包含头文件:string 在了解了string容器之后

    2024年02月05日
    浏览(483)
  • 【c++】string类的使用及模拟实现

    我们先了解一下什么是OOP思想 OOP思想,即面向对象编程(Object-Oriented Programming)的核心思想,主要包括“抽象”、“封装”、“继承”和“多态”四个方面。 抽象:抽象是忽略一个主题中与当前目标无关的那些方面,以便充分地注意与当前目标有关的方面。抽象并不打算了

    2024年04月11日
    浏览(35)
  • 【c++】:STL模板中string的使用

        文章目录 STL简介 一.认识string 二.string中基本功能的使用 总结   STL(standard template libaray-标准模板库): 是 C++ 标准库的重要组成部分 ,不仅是一个可复用的组件库,而且 是一个包罗数据结构与算法的软件框架 。 STL 的版本 原始版本 Alexander Stepanov、Meng Lee 在惠普实验室完

    2024年01月18日
    浏览(43)
  • C++:模板初阶以及string类使用

    1.泛型编程 泛型编程: 编写与类型无关的通用代码 ,是代码复用的一种手段。 模板是泛型编程的基础。 实现加法: 两个函数只有类型上的不同,逻辑完全一致,能不能 写一份表示逻辑的模板,让编译器帮我们生成函数呢? 2.函数模板 模板的原理图 函数模板格式 templatet

    2024年02月13日
    浏览(39)
  • 【C++庖丁解牛】实现string容器的增删查改 | string容器的基本接口使用

    🍁你好,我是 RO-BERRY 📗 致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 函数名称 功能说明 push_back 在字符串后尾插字符c append 在字符串后追加一个字符串 operator+= (重点) 在字符

    2024年03月14日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包