【字符串】字符串处理常用函数

news/2025/2/7 17:29:21/文章来源:https://www.cnblogs.com/Tshaxz/p/18702966

头文件:

#include <cstring>
#include <sstream>

题目未给定数据个数,一般多在模拟题用到

string str;
getchar(); //如果getline()之前已经读入过其他数据,需要用getchar()读掉前面剩下的回车
getline(cin, str); //读入一整行
stringstream ssin(str); //从字符串中读入数据(这里变量名可以随便取,这里取名为ssin)
while(ssin >> str) //这样可以做到从字符串中读入数据

统计输入的字符串个数:

string strs[N];
int n = 0;
while(cin >> strs[n]) n ++ ;

string常用函数

string str;find();
str.find('x'); //从一个string类型中找某个字符,找不到返回-1,找到返回第一次出现下标
find()函数也可以找字符串
如果要查找字符串y中是否包含字符串x,可以写成:
if(y.find(x) != -1) //此时y中包含xsubstr(); //用来返回string字符串的子串
//可以写两个参数,也可写一个 
str.substr(1, 3); //返回下标从1开始,长度为3的str的子串
str.substr(1); //返回下标从1开始直到结尾的str的子串str.c_str(); //string变成字符数组char[]
str.back(); //末尾字符
str.pop_back(); //去掉末尾字符
str.size(); //string字符串长度

strstr(str1,str2) 函数
用于判断字符串str2是否是str1的子串。
如果是,则该函数返回str2str1中首次出现的地址;否则,返回NULL

strstr(str1, str2);
注意这里的str1和str2必须为char[]类型,不能是string(因为strstr是C语言的函数)char str1[] = "1234xyz"; 
char str2[] = "34";if(strstr(str1, str2)) cout << strstr(str1, str2);
else cout << "null";

上面的结果为34xyz,即它把首次出现的位置到结尾全部输出了。

如果使用string,可以先用c_str()函数将string转换为char[]再调用strstr()

string a, b;
cin >> a >> b;if(strstr(a.c_str(), b.c_str())) puts("Yes"); //如果b是a的子串
else puts("No");

也可以手写string版本的strStr函数(KMP板子)

void strStr(string s, string p)
{int n = s.size(), m = p.size();s = ' ' + s, p = ' ' + p;for (int i = 2, j = 0; i <= m; i++){while (j && p[i] != p[j + 1]) j = ne[j];if (p[i] == p[j + 1]) j++;ne[i] = j;}for (int i = 1, j = 0; i <= n; i++){while (j && s[i] != p[j + 1]) j = ne[j];if (s[i] == p[j + 1]) j++;if (j == m) printf("%d ", i - m); //匹配成功}
}

字符串与数字的转换

string str;stoi(str); //string to int
stoll(str); //string to long long
stof(str); //string to float
stod(str); //string to doublechar s[N]; //字符数组atoi(s); //a to int,将char数组变成int  
atod(s); //a to double
atoll(s); //a to long long

字符函数(参数是字符char)

isdigit(); //是数字,返回true
isalpha(); //如果是字母,返回true
isalnum(); //如果是字母或数字,返回true
islower(); //是小写字母,返回true
isupper(); //是大写字母,返回true
tolower(); //如果是大写,返回其小写
toupper(); //如果是小写,返回其大写
ispunct(); //如果是标点符号,返回true
isspace(); //如果是空白字符,包括空格、换行符、回车、制表符等,返回true
isxdigit(); //如果是16进制数,返回true,如0-9、a-f、A-F

还有两个使用频率相对来说较少的

sscanf(); //也是从字符串中读入数据,这个一般用于日期类模拟题,输入的是固定格式的日期
例子:
这题的输入格式为:yyyymmddHHMM(年、月、日、小时、分钟)Timer(string str){sscanf(str.c_str(), "%04d%02d%02d%02d%02d", &year, &month, &day, &hour, &minute);}sprintf(); //将数据输出到字符串中
例子:string to_string(){char str[20];sprintf(str, "%04d%02d%02d%02d%02d", year, month, day, hour, minute);return str;}

上面的例子来源于AcWing 3254. Crontab ,代码:这里


两个优化技巧:
1.非递归函数前加inline
2.变量名前加register

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/880133.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【字符串处理之sscanf函数】读入HH:MM:SS:NN型时间;读入日期

读取时间 HH:MM:SS:NN型 函数 //转为毫秒表示,方便比大小 int get(string time) {int h, m, s, ms;//从字符串内读数据sscanf(time.c_str(), "%d:%d:%d.%d", &h, &m, &s, &ms);return h * 3600000 + m * 60000 + s * 1000 + ms; }样例1 输入 3 23:4…

【字符串处理sscanf】读入HH:MM:SS:NN型时间

读取时间 HH:MM:SS:NN型 函数 //转为毫秒表示,方便比大小 int get(string time) {int h, m, s, ms;//从字符串内读数据sscanf(time.c_str(), "%d:%d:%d.%d", &h, &m, &s, &ms);return h * 3600000 + m * 60000 + s * 1000 + ms; }样例1 输入 3 23:4…

如何阅读一本书

明确自己阅读的目的扩充知识:期望扩充哪方面的知识呢 研究他人的方法论? 深挖某些知识点?当前看的内容是否合适? 应用方法论SQ3R 阅读法Survey (预览): 快速浏览标题、目录、摘要等,了解文章或书籍的大意。 Question (提问): 对内容提出问题,带着问题阅读能提高理解力。 …

【转载】在windows下vscode终端里无法运行脚本解决方案

windows下使用vscode中的终端运行脚本出现以下的问题解决方案: 以管理员身份打开vscode,任意打开一个终端 在终端中输入get-ExecutionPolicy,若返回Restricted,说明现在是vscode是被禁止运行脚本 输入set-ExecutionPolicy RemoteSigned 这段命令 再看看现在的状态,输入 ge…

(转!)A卡玩转Stable Diffusion

转:https://www.fujieace.com/ai/amd-stable-diffusion.html今天,一位网友通过查看“设备管理器”,发现他的显卡是“AMD Radeon RX 580 2048SP”。因此,Stable Diffusion用显卡却怎么也跑不起来?一生成图片就报错误“rocBLAS error: Could not initialize Tensile library…

心脏支架 All In One

心脏支架 All In One心脏支架 All In One 冠状动脉成形术和支架植入术 冠状动脉成形术和支架置入术又称为经皮冠状动脉介入治疗。心脏支架副作用https://www.mayoclinic.org/zh-hans/tests-procedures/coronary-angioplasty/about/pac-20384761 demos(🐞 反爬虫测试!打击盗版…

Grafana 的性能告警-高效获取性能测试指标问题

做性能测试的时候大部分公司都会使用 prometheus+grafana 监控平台对性能测试结果进行监控。这个grafana的监控大屏可以很有效的查看到所有历史数据以及趋势变化。但是如果做的是长时间的稳定性测试,要一直盯着屏幕监控也不太现实,所以我们希望这个监控的指标一旦有异常能给我…

痞子衡嵌入式:恩智浦i.MX RT1180系列MCU启动那些事(2)- Boot配置(BOOT Pin/eFUSE)

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MX RT118x系列MCU的Boot配置。痞子衡旧文 《RT四位数Boot简介》 里为大家介绍了 Boot 基本原理以及 i.MXRT1xxx Boot 方式,此外也有文章 《RT1xxx Boot配置》 介绍了 i.MXRT10xx/RT1170 Boot 的行为…

三分钟让Dify接入Ollama部署的本地大模型!

1 运行 Ollama 与 qwen2:0.5b 聊天 ollama run qwen2:0.5b启动成功后,ollama 在本地 11434 端口启动了一个 API 服务,可通过 http://localhost:11434 访问。 2 Dify 中接入 Ollama 2.1 添加模型 在 设置 > 模型供应商 > Ollama 添加模型:填写 LLM 信息:模型名称:以 …

Ubuntu 一次成功安装 k8s集群

Ubuntu系统设置静态固定IP保姆级教程 修改主机名 sudo hostnamectl set-hostname k8s-master关闭防火墙 systemctl status ufw.service systemctl stop ufw.service systemctl disable ufw.serviceapt-get update安装docker apt install -y docker.iosudo mkdir -p /etc/docker…

高标准农田智慧管理系统

随着科技的飞速发展,智慧农业已成为推动农业现代化的重要力量。高标准农田智慧管理系统作为智慧农业的核心组成部分,正逐步改变着传统农业的生产方式。本文将深入探讨高标准农田智慧管理系统的建设内容,以期为我国农业的可持续发展提供新的思路和方向。一、高标准农田智慧管…