当前位置: 首页 > java >正文

字符串|数组|计算常见函数整理-竞赛专用(从比赛真题中总结的,持续更新中)

1、获取字符串的长度

遇到要多次调用的时候最好用一个变量存起来,不然多次调用也会浪费内存。

string s;
s.size();
s.length();

2、遇到要查找一句话的单词是否是哪个单词时,可以用find(),查找函数,找不到就会返回-1

找单词要插入什么什么地方,删除哪个地方,替换哪个地方都要用find();

返回索引

string s="this is a easy problem";
if(s.find("easy")!=-1){cout<<"找到了easy这个单词";
}

3、清除字符串内容

多组数据的时候要记得及时清除字符串内容,不然会错乱。

string s;
s="this is a good idea";
s.clear();

4、截取固定长度的字符串,就是截取一部分输出

易错点:

substr(下标开始位置,长度)

一定是下标开始位置和长度两个参数,别的参数是不可以的

不能写成下标开始位置到下标结束位置,会错,

因为我就是这么错的,然后翻来覆去看了好几遍都觉得自己逻辑没有问题,是没有问题,函数也用了,就是写错参数了

string s;
s="there are my home.";
string s1=s.substr(6,3);
cout<<s1;
//输出:are
//substr(开始位置的下标,长度)

5、对数函数

log的n次方表示:log(x)/log(n)

如log2时

因为log10的函数就是log(x);

别以为简单的函数不用学了,到考场你就知道了

int s=(int)log(4)/log(2)

6、寻找数组或变量数组中相同的值的时候可以用lower_bound()

因为lower_bound(first,last,x);是查找一个大于等于x的值的迭代器,所以后期需要去转换

底层逻辑是先去找第一个等于x的值,如果找不到相等的值,就找第一个大于x的值

这个跟find有异曲同工之妙,都是找等于的,但是find找不到相等的会直接返回-1,但是这个找不到会找大于这个数了(有点子曲线救国那味了)

具体示例如下:

vector<int>v;
v.push_back(1);
v.push_back(2);
//查找2
int p = lower_bound(v.begin(),v.end(),2)-v.begin();
if(p!=-1&&v[p]==2){cout<<"找到了2";
}

同理,upper_bound();是 找到第一个大于x的数并返回迭代器

总所周知,迭代器(迭代器一般直接返回的是数组的地址),数组的地址肯定不能用int类型的变量直接表示,但是可以减去v.begin(),减去最开头的地址,就得到Int 类型的下标,就是位置。

7、大写字母转小写字母函数

tolower

大写字母转小写字母;

输出//this is a string


#include <iostream>
#include <string>
#include <cctype>
using namespace std;
int main()
{string str= "THIS IS A STRING";for (int i=0; i <str.size(); i++)str[i] = tolower(str[i]);cout<<str<<endl;return 0;}

8、小写转大写,用toupper()

一样道理跟上面,就不过多

9、字符串替换函数

.replace(起始位置,长度,要被替换的字符串,要被替换字符串.find(“替换串中的某个字符串”),要替换字符串的个数。

string s="01234567ng zh.";
string str="#2345";
s.replace(0,5,str,str.find("#2"),3);
cout<<"结果:"<<s;

10.控制浮点数保留几位小数

(由于本博主过久没用基础代码,已经忘记这个怎么用了,所以这纯属简单代码凑个数)

fixed<<setprecision(2)<<x;

例如:
想输出两位小数;

#include<bits/stdc++.h>
using namespace std;
int main()
{float v = 1.54321;cout<<fixed<<setprecision(2)<<v<<endl;  return 0;
}

11、删除字符串

两种方法

1、s1.erase(子串起始位置,子串结束位置)

2、erase(pos,n);

s1.erase(子串起始位置,子串结束位置)
s1.erase(起始位置,要删除的字符长度);

12、浮点数向上,向下取整

//向上取整,返回大于x的最小整数

//向下取整,返回小于x的最大整数

//向上取整,返回大于x的最小整数ceil(1.2)
//输出:2ceil(-1.2)
//输出:-1//向下取整,返回小于x的最大整数floor(1.5)
//输出:1floor(-1.5)
//输出:-2

13、

自动补零,自动补数

cout << setfill('0') << setw(5) << s;

14、

四舍五入函数

round(1.4);
//输出1
round(1.6);
//输出2

15、删除字符串的某个特定位置的元素

int pos=str.find("hello");
str.erase(pos,5);//
erase(要删除的字符位置,要删除的字符长度)

16、字符串插入函数

s.insert(pos,string);
//
注释;
pos表示要插入的位置,
string表示要插入的字符串

17、字符串替换函数

str.replace(要被替换的字符串的开始位置,要被替换的字符串的结束位置,要替换的字符串)

比如,下面的例子是替换一串连续的6;

std::string str;// 读取一行输入std::getline(std::cin, str);size_t pos = 0;while ((pos = str.find("6666", pos)) != std::string::npos) {int count = 0;size_t start = pos;// 统计连续6的个数while (pos < str.length() && str[pos] == '6') {count++;pos++;}if (count >= 4 && count <= 9) {// 连续6的个数在4到9之间,替换为9str.replace(start, count, "9");} else if (count > 9) {// 连续6的个数大于9,替换为27str.replace(start, count, "27");}}

(持续更新中)

这里是红糖,记录我的小白成长史。

如果觉得对你有帮助的话可以点个赞,点个关注,创作不易,请多多支持。

我们下篇文章见!!

http://www.xdnf.cn/news/13578.html

相关文章:

  • 7.Vue的compute计算属性
  • atomicity of memory accesses
  • 【知识图谱构建系列1】数据集介绍
  • 本地docker部署的dify,不用git命令如何无损升级?
  • Vue3前端项目Docker容器化部署工作报告
  • 【算法 day01】LeetCode 704二分查找 | 27移除元素 | 977有序数组的平方
  • 【电力物联网】SDN架构与工作原理介绍
  • ospfOSPF特殊区域及其他特性
  • Unicode:如何让用户东方不败和[Family: Man, Woman, Girl, Boy]顺利通过用户名长度检查?
  • 【Linux指南】文件系统基础操作与路径管理
  • 爬虫+动态代理助力 AI 训练数据采集
  • [未验证]abaqus2022 更改内置python
  • 选择与方法(4) 职场内篇 沿着赤道走,到不了北极,找准职场方向,建立可迁移技能
  • 智谱的AI Agent :CoCo
  • GIS数据制备,空间分析与高级建模实践技术应用
  • 软件确认测试报告:如何评估软件功能及测试关键点?
  • 第二届“Parloo”CTF应急响应挑战赛(应急响应题目复盘)
  • ptyhon 导入本地模块 no module named Python Error几种解决方案
  • Excel文件数据的读取和处理方法——C++
  • 华为云Flexus+DeepSeek征文 | 基于华为云ModelArts Studio搭建AnythingLLM聊天助手
  • 支持在Windows电脑上使用的备忘录提醒小软件
  • 【大模型训练】中短序列attention 和MOE层并行方式
  • Java八股文——Spring「SpringBoot 篇」
  • 工业相机如何提高传输速度
  • 【从入门到精通】GIS数据制备,空间分析与高级建模实践应用
  • MySQL主从配置详细指南
  • leetcode 135. 分发糖果
  • 大模型Transformer触顶带来的“热潮退去”,稀疏注意力架构创新或是未来
  • HarmonyOSNext全栈数据存储双星解析:轻量级VS关系型存储终极指南
  • Linux 复制文件到另一个文件夹方法