【算法】字符串-洛谷

文章目录

    • P5015 [NOIP2018 普及组] 标题统计
    • P5734 【深基6.例6】文字处理软件

P5015 [NOIP2018 普及组] 标题统计

NOIP2018 普及组] 标题统计 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

在怎么读取数据输入的问题上纠结了很久。

  • 本来想用cin>>x的形式一个字符一个字符地读,但发现不知道什么时候停止读取。
  • 改用scanf("%s",&s),但发现不能读取中间有空格的字符串(会被认为是两个字符串)。
  • 最终使用cin.getline(str, len),直接读取一行。

通过代码

#include<iostream>
using namespace std;
int main()
{int count=0;//标题中的字符数int LEN=20;char s[LEN]={};cin.getline(s, LEN);for(int i=0;i<LEN;i++)if((s[i]!='\0')&&(s[i]!=' ')&&(s[i]!='\n'))count++;cout<<count;return 0;
}

P5734 【深基6.例6】文字处理软件

P5734 【深基6.例6】文字处理软件 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

在插入字符串部分反复出bug。

  • 3 a str:插入片段,在文档中第a个字符前面插入字符串str,并输出文档的字符串。

思路是先腾出空位然后,然后填进要插入的字符串没错。但我想要在一个循环中完成,腾一个就填一个。后来发现思路是混乱了的,需要移动的字符串与需要填入的字符串长度并不一致。

如原字符串为abc,操作为3 0 d,我需要将三个字符各后移一位,但只需要填入一个字符d。

后来又遇到循环条件控制的问题,腾出空位时需要访问原字符串,我使用的代码如下。然而实际上随着字符串的后移,第一个\0的位置其实是在变化的,已经不是原来的字符串结尾了。而且我居然忘记了我是使用了一个int e;来指示字符串s的尾部的。

for(int i=0;s[i]!='\0';i++)s[e-1-i+len]=s[e-1-i]; //腾出空位

我将这一行代码修改如下,就通过了洛谷的测试。可能细心的读者已经发现了问题,“你怎么把整个字符串都后移了?”没错,虽然我成功过了洛谷的测试,但实际上使用的是一段有bug的代码

for(int i=0;i<e;i++)s[e-1-i+len]=s[e-1-i]; //腾出空位

这段含bug的完整代码如下:

#include<iostream>
#include<cstdio>
using namespace std;
void show(char s[], int e)//打印字符串 --> right
{for(int i=0;i<e;i++)printf("%c",s[i]);printf("\n");
}
void insert_end(char s[], int& e)//1 后接插入
{char str[100]={};scanf("%s",str);for(int i=0;str[i]!='\0';i++)s[e++]=str[i];show(s,e);
}
void get_part(char s[], int& e)//2 截取文档部分
{int a,b;//截取从a起的b个字符cin>>a>>b;for(int i=0;i<b;i++)s[i]=s[a+i];e=b;show(s,e);
}
void insert_front(char s[], int& e)//3 插入片段
{int a;char str[100]={};int len=0; // 插入字符串str的长度cin>>a;scanf("%s",str);for(int i=0;str[i]!='\0';i++)len++; //得到str长度for(int i=0;i<e;i++)s[e-1-i+len]=s[e-1-i]; //腾出空位for(int i=0;i<len;i++)s[a+i]=str[i]; // 插入字符e=e+len;show(s,e);
}
void find(char s[], int& e)
{char str[100]={};scanf("%s",str);for(int i=0;i<e;i++){int flag=1;for(int j=0;str[j]!='\0';j++)if(s[j+i]!=str[j])flag=0;if(flag){cout<<i<<endl;return;}}cout<<-1<<endl;
}
int main()
{char s[1000]={};//文档字符串int e=0;//s最后一个字符的下一个char str[100]={};//临时字符串int q=0;//操作次数int op=0;//操作类型cin>>q;scanf("%s",str);//输入初始文档for(int i=0;str[i]!='\0';i++)s[e++]=str[i];for(int i=0;i<q;i++)//q次操作{cin>>op;if(op==1)insert_end(s,e);else if(op==2)get_part(s,e);else if(op==3)insert_front(s,e);else if(op==4)find(s,e);else cout<<"error"<<endl;}return 0;
}

它在下面的测试中就发生了错误:

1
abcde
3 4 TT
ababTTe

只需要将腾出空位的代码修改如下,即可排除该bug。

for(int i=0;i<e-a;i++)s[e-1-i+len]=s[e-1-i]; //腾出空位
1
abcde
3 4 TT
abcdTTe

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

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

相关文章

netstat命令

netstat 是一个计算机网络命令行工具&#xff0c;用于显示网络连接、路由表和网络接口等网络相关信息。netstat 命令可以在各种操作系统上使用&#xff0c;包括 Windows、Linux 和 macOS 等。 在使用 netstat 命令时&#xff0c;可以提供不同的选项来显示不同类型的网络信息。…

猫头虎分享已解决Bug || Invariant Violation in React: Element Type is Invalid ‍

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

【Web】NSSCTF Round#18 Basic个人wp(未完待续)

①门酱想玩什么呢&#xff1f; 先试一下随便给个链接 不能访问远程链接&#xff0c;结合评论区功能&#xff0c;不难联想到xss&#xff0c;只要给个评论区链接让门酱访问就可 我们研究下评论区 从评论区知道&#xff0c;要让门酱玩元梦之星&#xff0c;考虑直接 <script&…

Vuex 模块的详解

Vuex 模块是将 store 分割成多个模块的一种方式&#xff0c;每个模块都有自己的状态、mutations、actions 和 getters。这有助于更好地组织和管理应用程序的状态。 创建模块&#xff1a; 首先&#xff0c;需要创建一个模块。可以在 store 中定义一个新的模块对象&#xff0c…

在git bash中可以提交代码,但是在android studio中提交代码就会报错

出现这个错误 error: unable to read askpass response from ‘C:\Users…\AppData\Local\Google\AndroidStudio2021.2\tmp\intellij-git-askpass-local.sh’ bash: line 1: /dev/tty: No such device or address 勾选git的use credential helper选项再提交就行了

ITK 图像分割(一):阈值ThresholdImageFilter

效果&#xff1a; 1、itkThresholdImageFilter 该类的主要功能是通过设置低阈值、高阈值或介于高低阈值之间&#xff0c;则将图像值输出为用户指定的值。 如果图像值低于、高于或介于设置的阈值之间&#xff0c;该类就将图像值设置为用户指定的“外部”值&#xff08;默认情况…

【电路笔记】-并联电感

并联电感 文章目录 并联电感1、概述2、并联电感示例13、互耦并联电感器4、并联电感示例25、并联电感示例36、总结当电感器的两个端子分别连接到另一个或多个电感器的每个端子时,电感器被称为并联连接在一起。 1、概述 所有并联电感器上的压降将是相同的。 然后,并联的电感器…

如何写好一个简历

如何编写求职简历 论Java程序员求职中简历的重要性 好简历的作用 在求职过程中&#xff0c;一份好的简历是非常重要的&#xff0c;它甚至可以直接决定能否被面试官认可。一份出色或者说是成功的个人简历&#xff0c;最根本的作用是能让看这份简历的人产生一定要见你的强烈愿…

【lesson53】线程控制

文章目录 线程控制 线程控制 线程创建 代码&#xff1a; 运行代码&#xff1a; 强调一点&#xff0c;线程和进程不一样&#xff0c;进程有父进程的概念&#xff0c;但在线程组里面&#xff0c;所有的线程都是对等关系。 错误检查: 传统的一些函数是&#xff0c;成功返回0&…

Java基于 SpringBoot 的高校校园点餐系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

BTC破5W+QAQ

比特币突破5万美元 创2021年来最高 比特币在龙年伊始涨超6.8%。在大年初四&#xff08;2月13日&#xff09;一度最高涨至5万零383美元。 今年1月&#xff0c;当市场期待已久的现货比特币交易所挂牌基金&#xff08;ETF&#xff09;推出后&#xff0c;比特币遭抛售&#xff0c…

01.数据结构篇-链表

1.找出两个链表的交点 160. Intersection of Two Linked Lists (Easy) Leetcode / 力扣 例如以下示例中 A 和 B 两个链表相交于 c1&#xff1a; A: a1 → a2↘c1 → c2 → c3↗ B: b1 → b2 → b3 但是不会出现以下相交的情况&#xff0c;因为每个节点只有一个…

python从入门到精通(二十二):python爬虫框架使用

selenium自动化 scrapy框架 pyspider框架 爬虫验证码 动态渲染页面爬取 模拟登录 AutoScraper

代码随想录算法训练营DAY17 | 二叉树 (4)

一、LeetCode 110 平衡二叉树 题目链接: 110.平衡二叉树https://leetcode.cn/problems/balanced-binary-tree/ 思路&#xff1a;设置深度计算函数&#xff0c;进行递归处理。 class Solution {public boolean isBalanced(TreeNode root) {if(root null){return true;}boolean…

如何在 JavaScript 中比较两个日期 – 技术、方法和最佳实践

在 JavaScript 中&#xff0c;您可以使用 date 对象有效地处理应用程序中的日期、时间和时区。 Date 对象可帮助您有效地操作数据、处理各种与日期相关的任务&#xff0c;并在创建实际应用程序时执行一些计算。 &#xff08;本文内容参考&#xff1a;java567.com&#xff09;…

幻兽帕鲁服务器配置参数说明(Palworld官方汉化)

创建幻兽帕鲁服务器配置参数说明&#xff0c;Palworld服务器配置参数与解释&#xff0c;阿腾云atengyun.com分享&#xff1a; 自建幻兽帕鲁服务器教程&#xff1a; 阿里云教程 https://t.aliyun.com/U/bLynLC腾讯云教程 https://curl.qcloud.com/oRMoSucP 幻兽帕鲁服务器 幻…

基于Keras和LSTM单参数预测中兴通讯股票走势,结果震惊,含代码数据集

1.前言 昨天用分类算法预测大A各个股票的第二天行情&#xff0c;预测结果出现了千股下跌的场景&#xff0c;结果着实让我震惊&#xff0c;预测结果如下图&#xff0c;有没有可能预测第二天究竟涨了多少或者跌了多少呢&#xff1f;毕竟短线交易见好就收呢&#xff1f; 通过查找…

短路在JavaScript中是如何工作的?

在 JavaScript 中&#xff0c;理解真实和虚假的值是编写高效简洁代码的基础。结合短路的概念&#xff0c;开发人员可以编写优雅的解决方案来应对常见的编程挑战。 在本实践指南中&#xff0c;我们将探讨真实值和虚假值&#xff0c;并了解 JavaScript 中短路的机制。 您可以从…

爬虫——ajax和selenuim总结

为什么要写这个博客呢&#xff0c;这个代码前面其实都有&#xff0c;就是结束了。明天搞个qq登录&#xff0c;这个就结束了。 当然也会更新小说爬取&#xff0c;和百度翻译&#xff0c;百度小姐姐的爬取&#xff0c;的对比爬取。总结嘛&#xff01;&#xff01;&#xff01;加…

第七篇:SQL语法-DML-数据操作语言

DML英文全称是Data Manipulation Language(数据操作语言)&#xff0c;用来对数据库中表的数据记录进行增删改操作。它主要包含以下操作&#xff0c; 添加数据(INSERT)修改数据(UPDATE)删除数据(DELETE) 一&#xff0c;添加数据(INSERT) 注意&#xff1a; 插入数据时&#xff0c…