个人或主题网站建设 实验体会个人网站托管
web/
2025/10/7 3:53:05/
文章来源:
个人或主题网站建设 实验体会,个人网站托管,桂城网站制作,深圳网站设计首选刻前言#xff1a;在日常的程序设计中#xff0c;我们会经常使用到字符串。比如一个人的身份证号#xff0c;家庭住址等#xff0c;只能用字符串表示。在C语言中#xff0c;我们经常使用字符数组来存储字符串#xff0c;但是某些场景(比如插入#xff0c;删除)下操作起来很…前言在日常的程序设计中我们会经常使用到字符串。比如一个人的身份证号家庭住址等只能用字符串表示。在C语言中我们经常使用字符数组来存储字符串但是某些场景(比如插入删除)下操作起来很繁琐。在C中底层设计了一个string类将经常使用的功能封装在其中使用起来非常简单便捷。 本文主要介绍string的使用方法和几个常用函数最后再列举几个经典例题。 我们使用string时经常会用到它封装的函数这里推荐一个网站C Reference。函数忘了怎么使用时可以参考该网站。 目录 一.介绍二.使用1.创建一个字符数组存储字符串hello world2.截取部分字符串3.从键盘上输入 三.常用重载运算符和函数1./2.size()3.capacity()4.reserve()5.[]运算符遍历string6.push_back()尾部插入一个字符7.append() 尾部插入一段字符串8.insert() 头部插入 四.迭代器1.iterator 正向迭代器重点2.reverse_iterator 反向迭代器3.reverse函数(字符串逆置神器) 五.例题1.字符串相加2.字符串最后一个单词长度 一.介绍 长话短说不将它讲的太神秘 string是用字符的顺序数组实现的类用于管理字符数组。 我们平常怎么使用自定义的类就怎么使用string。 二.使用
1.创建一个字符数组存储字符串hello world 格式string 对象(字符或字符串) 1.形如string str2(hello world)实际上就是调用string类的构造函数初始化对象str2. 2.string类中有流提取流插入运算符重载可以直接输出或者输出string类型数据。 //C语言
char str1[] hello world;
//C
string str2(hello world); //构造函数
string str3(#); //单个字符
cout str2 endl; //string类中有流提取流插入运算符重载可以直接输出或者输出string类型数据。控制台输出如下 2.截取部分字符串 string类对此也进行了设计第一个参数为截取string对象第二个为需要截取部分的起始下标第三个参数为截取字符个数单位是字节 如下代码想截取s1对象中的world给给s2w的下标为6(第二个参数),world有5个字符(第三个参数)
int main()
{string s1(hello world);string s2(s1, 6, 5); //截取s1对象中的world给给s2cout s2 endl;
}控制台输出如下可以看到截取成功了 3.从键盘上输入 这里就可以体现string的优点 使用C语言我们需要考虑给字符数组开多大的空间而string不用我们考虑这点我们只管输入编译器会自动帮我们适配合适的空间。 int main()
{string s1; //实例化一个对象s1cin s1; // 输入cout s1 endl; //打印return 0;
}如下前两行为从键盘上输入的后两行为打印的。
三.常用重载运算符和函数
string函数设计的接口感兴趣的可以去文章开头给的网站看看。下面某些函数只给出常用的接口。
1./
单从这个题目就能让你感受到string的魅力 请看题目从键盘上输入两个字符串要求将后一个字符串拼接到前一个字符串后面输出拼接后的前一个字符串。字符串长度不超过50字节 从C语言角度考虑首先我们要开两个不小于50字节的字符数组之后简单一点的就是使用strcat函数拼接。但是strcat函数长久不用我忘掉了呢还要再去翻看笔记回忆。 Cstring类对运算符进行了重载这个的本质就是尾插
int main()
{string s1, s2;cin s1 s2;s1 s1 s2; //s1,s2顺序不能颠倒//s1 s2; //使用也可以cout s1 endl;return 0;
}控制台输出如下其中第一行为输入的s1第二行为输入的s2第三行为拼接后的s1 2.size() 返回string对象的有效字符长度不包括\0,相当于C语言的strlen。 int main()
{string s1(hello world);cout s1.size() endl;return 0;
}控制台输出如下
3.capacity() 返回string对象的容量 我们知道string会自动扩容而它当然不是一个一个字节阔的它是按照一定倍率扩容。 int main()
{string s1(hello world);cout size: s1.size() endl;cout capacity: s1.capacity() endl;return 0;
}控制台输出如下可以看到有效字符大小为11字节容量为15字节。 4.reserve() reserve——保留(不要把它当成reverse(逆置) 功能请求容量的变化 价值如果确定大概需要开多大的空间可以提前开好减少扩容提高效率。扩容是有代价的特别是异地扩容需要拷贝旧空间的数据移到新空间 int main()
{string s1(hello world);cout size: s1.size() endl;cout 原capacity: s1.capacity() endl;s1.reserve(100);cout 新capacity: s1.capacity() endl;return 0;
}控制台输出如下 5.[]运算符遍历string string类对[]运算符进行了重载使得我们可以借助[]像访问数组一样访问string。对于解决一些与字符串有关的题很有帮助。 以遍历string为例
int main()
{string s1(hello world);for (size_t i 0; i s1.size(); i) //运用size()函数{cout s1[i] ; //下标访问}return 0;
}控制台输出如下 6.push_back()尾部插入一个字符 在string对象尾部插入一个字符 int main()
{string s1(hello world);s1.push_back(x);cout s1 endl;return 0;
}控制台输出如下 7.append() 尾部插入一段字符串 形式append(字符串/string对象) 实际上设计的有些冗余插入的话我们直接用就行了何必再使用append函数呢 int main()
{string s1(hello world);string s2(!!!);s1.append(xxx);s1.append(s2);cout s1 endl;return 0;
}控制台输出如下 8.insert() 头部插入 插入一个字符 1.常规做法s.insert(起始位置下标插入个数要插入字符) 2.迭代器做法s.insert(s.begin(),要插入字符) int main()
{string s1(hello world);string s2(hello world);string s3(hello world);s1.insert(1,1,x); // 在h后插入一个xs2.insert(1, 2, x); // 在h后插入两个x s3.insert(s3.begin(), x); // 头插x cout s1 s1 endl; //hxello worldcout s2 s2 endl; //hxxello worldcout s3 s3 endl; //xhello worldreturn 0;
}插入一段字符串s.insert(起始位置下标字符串) int main()
{string s1(hello world);s1.insert(1,xx);cout s1 endl; //hxxello worldreturn 0;
}四.迭代器
1.iterator 正向迭代器重点
函数名作用下面函数仅适用于正向迭代器begin()返回string开头的地址end返回string最后一个有效字符的下一个位置的地址一般都是\0 iterator是迭代器的意思它封装在string类中list树等数据结构中都有迭代器故而使用时要受string类域限制要写成string::iterator形式。使用时可以将它想象成一个指针来理解。 借助迭代器遍历string
int main()
{string s1(hello world);string::iterator str s1.begin();//auto str s1.begin(); 写成这样也可以auto是类型指示符可以根据begin推出正向迭代器while (str ! s1.end()) {cout *str ;str;}cout endl;return 0;
}控制台输入如下 上述代码借助begin()函数返回开始位置的迭代器end()指向最后一个字符下一个位置此处就是\0。 问可这样子不就是单纯的指针遍历吗何必那么麻烦还使用迭代器 答迭代器的一个特点就是通用性在vectorlist树等中都有迭代器。就以list举例它是由一个一个的小结点组成的物理空间中并不是连续的使用结点指针并不能找到它的下一个结点但是像上述代码一样套上迭代器就可以遍历list。因此迭代器遍历才是最主流的遍历方式。
2.reverse_iterator 反向迭代器
函数名作用下面函数仅适用于反向迭代器rbegin()返回string最后一个有效字符的下一个位置的地址一般都是\0rend返回string开头的地址 顾名思义跟正向迭代器相反reverse_iterator是反正使用的。 借助反向迭代器倒着遍历string
int main()
{string s1(hello world);string::reverse_iterator str s1.rbegin();//auto str s1.rbegin(); 写成这样也可以auto是类型指示符可以根据rbegin推出反向迭代器while (str ! s1.rend()){cout *str ;str;}cout endl;return 0;
} 控制台输入如下可以看到它是倒着遍历的 补const迭代器const_iterator const_reverse_iterator 总计共有4种迭代器。
3.reverse函数(字符串逆置神器) 传入迭代器区间 reverse(s.begin(),s.end()); int main()
{string s1(hello world);reverse(s1.begin(), s1.end()); //传入迭代器区间cout s1 endl;return 0;
}控制台输出如下 五.例题
1.字符串相加
点击链接 高精度不能用整型或长整型直接相加。 运用string一位一位相加进位。 class Solution {
public:string s;string addStrings(string num1, string num2) {int end1 num1.size()-1,end2 num2.size()-1;int ret 0,sum 0;while(end1 0 || end2 0){int n1 end10?num1[end1]-0:0;int n2 end20?num2[end2]-0:0;sum n1n2ret;ret sum/10;s sum%100;--end1;--end2;}if(ret 1)s 1;reverse(s.begin(),s.end());return s;}
};2.字符串最后一个单词长度 1.牛客要包头文件 string 2.rfind()若没找到返回无符号的-1 3.string::npos 无符号的-1 4.注意只有一个单词的情况 #include iostream
#includestring
using namespace std;
int main()
{string s1;getline(cin,s1);size_t eblack s1.rfind( ); //倒着找第一个空格没找到返回无符号的-1if(eblack ! string::npos){cout s1.size()-(1eblack); //下标-1}else {cout s1.size();}return 0;
}文末BB对哪里有问题的朋友尽管在评论区留言若哪里写的有问题也欢迎朋友们在评论区指出博主看到后会第一时间确定修改。最后制作不易如果对朋友们有帮助的话,希望能给博主点点赞和关注.
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/88271.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!