首页 > 编程语言 >C++中的string类

C++中的string类

时间:2024-09-28 17:51:44浏览次数:7  
标签:字符 string 1.3 auto C++ 报错 size

前言

C语言中字符串是以‘\0’结尾的字符的集合,为了方便操作,C标准库中提供了一些str系列的库函数,接下来我们学习string类。

1. 标准库中的string类

1.1  string类

在使用string类的时候,必须包含#include头文件以及using namespace std;

1.2 auto 和范围for

auto关键词

auto可以自动匹配变量的类型,但有几个点需要注意:

1. 用auto声明指针类型时,用auto和auto*没有区别。auto声明引用类型时则必须加&

2. 当在同一行声明多个类型时,这些变量必须是同一种类型,否则编译器会报错,因为编译器实际只对第一个类型进行推导

3. auto 不能作为函数的参数,但是可以作为返回值,但是需要谨慎使用

4. auto不能直接用来声明数组

#include<iostream>
using namespace std;
int func1(auto a)//会报错,不能做参数
{
  
}
auto func2()//可以做返回值,但是需要谨慎使用
{ 
 return 3;
}
int main()
{
 auto a;//报错,必须有初始化
 auto b = 3,c = 3.2;//报错,必须为同一类型
 auto array[] = {4,5,6};//报错,不能作为数组
 return 0;
}

auto 的便利之处:

//std::map<std::string, std::string>::iterator it = dict.begin();
auto it = dict.begin();

范围for

对于一个有限的集合,C++11中引入了给予范围for循环。for循环后的括号由冒号:分为两部分,第一部分是范围for内用于迭代的变量,第二部分则表示被迭代的范围。

int main()
{
char arr[] = "ajiang";
for(auto ch:arr)
{
 cout<<ch<<' ';
}
return 0;
}

范围for可用于数组和容器对象上进行遍历

范围for的底层很简单,容器遍历实际就是替换为迭代器

1.3 string类的常用接口说明

1.3.1. string类对象的常见构造

void test()
{
 string s1;//默认构造s1
 string s2("ajiang");用字符串构造s2
 string (s2);拷贝构造s3
}

1.3.2. string类对象的容量操作

讲解:

1. size和length底层实现完全相同,引入size()是为了和其他容器的接口保持一致,一般情况基本上都用size;

2. clear只是将string中的有效字符清空,不改变空间大小

3.

resize(size_ t ,n)和resize(size_t n ,char  c)是将有效字符的个数改变到n个。不同的是,当字符个数增多的时候,resize(n),用0来填充多出的空间,而resize(n,c)则是用字符c来填充。

注意:当resize改变元素个数时,如果元素增多,可能会扩容,如果元素减少,则底层空间大小不变

4.

reserve(size_t ) 是为string预留空间,不改变有效元素个数,当reserve的参数小于空间总大小时,reserve不会改变容量大小。

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

 

operator[]实例:

void test()
{
 string s1("ajiang");
 cout<<s1[2]<<endl;
}

1.3.4 string类对象的修改操作

讲解:

1. 

+=是最常用的,可以+=字符,字符串,也可以+=一个字符指针指向的字符串。

其底层是通过append和push_back实现的。

2. 

c_str()返回一个指向数组的指针。可以用来输出字符串。

3. 

find可以查找一个字符串,也可以查找单个字符,查找到就返回该字符或字符串的下标,查不到就返回npos.

1.3.5 string类非成员函数

标签:字符,string,1.3,auto,C++,报错,size
From: https://blog.csdn.net/Ajiang2824735304/article/details/142615292

相关文章

  • llama-factory挂载pm2出现问题:node: /lib64/libstdc++.so.6: version `CXXABI_1.3.9'
    使用ssh连接服务器上运行llama-factory进行微调,但是一旦关闭ssh,程序也会随之关闭,而使用nohup命令会出现nohup:ignoringinput尝试采用pm2:(base)[hongjiayin@localhostLLaMA-Factory]$pm2startstart.shnode:/lib64/libstdc++.so.6:version`CXXABI_1.3.9'notfound......
  • 准备蓝桥杯和ACM:C++标准库头文件及其常用功能简介
    概述        在C++编程中,标准库为开发者提供了丰富的工具和功能,使得代码更简洁、易于维护。本文将深入探讨一些常用的C++标准库头文件,如<iostream>、<algorithm>、<string>等,以及它们所提供的基本功能与常见用法。通过对这些头文件的理解和应用,开发者能够更加高效地......
  • Day4 C++(运算符重载,模板与容器)(友元函数,运算符重载,赋值运算符,string字符串类,模板)
    1.友元friend1.1概念(掌握)定义:类实现了数据的隐藏与封装,类的数据成员一般定义为私有成员,仅能通过类的成员函数才能读写。如果数据成员定义为公共的,则又破坏了封装性。但是某些情况下,需要频繁读写类的成员,特别是在对某些成员函数多次调用时,由于参数传递、类型检查和安全......
  • 【C++】内存管理:内存分布、new/delete
        本篇主要介绍一下C++的内存管理相关知识。C++的内存管理和C语言保持一致。 1.C/C++内存分布一个程序的数据存储是需要分区的。常见的内存区域划分如下。我们学C++主要了解栈,堆,数据段,代码段。我们先看下面代码和相关问题。intglobalvar=1;staticintst......
  • C++ Practical-2 day2 运算符重载之时钟类++运算符
    系列文章目录点击直达——文章总目录文章目录系列文章目录C++Practical-2day2运算符重载之时钟类++运算符Overview1.时间类重载后缀`++`运算符来递增时间1.1.解释1.2.注意事项2.如何确保时间递增操作在多线程环境中是线程安全的?关于作者C++Practical-2day......
  • 10.C++程序中的循环语句
    C++中提供了三种循环语句(for循环,while循环以及do-while循环)来使程序员可以更方便地对数据进行迭代操作。if语句for语句的格式为:for(初始化语句;循环条件;迭代语句){代码块}for循环首先会执行初始化语句,主要是用于初始化循环变量和其它变量,然后判断条件是否为真,如果为真,则执......
  • 【C++】set与map
    一、什么是set、mapset和map是专门用来搜索的数据结构,是一种适合查找的容器,set和map的底层是二叉搜索树。*setset的声明:set<T>set中的相同元素只能存在一个。multiset(与set用法相同)可以存放多个相同元素。*mapmap的声明:map<T1,T2>map存储的匀速是pairmap中的与T1......
  • 【C++篇】迈入新世界的大门——初识C++(下篇)
    文章目录   前言   引用        引用的概念和定义        引用的特性        引用的使用        const引用        指针和引用的关系  inline         ......
  • Rust索引String
    Rust的String里其实是UTF-8编码的,而UTF-8是变长编码,因此会导致Rust索引String时,可能是索引第k个UTF-8字符(需要遍历字符串),也可能是索引第k个字节。因此,Rust不支持直接用下标来索引String。如果要找到第k个UTF-8字符:s.chars().nth(k)如果要找到第k个字节:letx:u8=s.as_bytes......
  • VSCode - Hint documentation of a Python function is different from its docstring
      Searched'defseed('inthesourcecode:  Thereisonedefinitionoftheseed()methodininterfaceclassRandomState:Theimplementationoftheseed()methodinclassRandomStateisasfollows:......VSCodehintdisplaysthedocstr......