【基础数据结构】字符串

一、字符串输入

1.scanf("%s",str);分隔符为空格、制表符、回车

2.fgets(str,10,stdin);10为字符串char str[10]长度,可以读取空格字符的字符串,10代表最大读取长度,最多读取9个字符,这个函数自动在读取到换行符停止,删除\n才能正确输出

str[strlen(str)-1]='\0';

printf("%s\n",str);

二、字符串输出

1.printf("%s\n",str);

2.puts(str);自动在末尾加上\n,不支持格式化输出

三、字符数组

char arr[size];

arr[0]='H';

arr[1]='e';

arr[2]='l';

arr[3]='l';

arr[4]='o';

arr[5]='\0';

四、字符串

char str[]="Hello,world!";

str[0]='h';

char str[]={'H','e','l','l','o','!','\0'};

char arr[13]="Hello,world!";

char *str=arr;

五、标准库函数

strlen(str);获取字符串长度

strcmp(str1,str2);比较两个字符串是否相等

strcpy(dest,src);将源字符串复制到目标字符串中

strcat(dest,src);将源字符串加入到目标字符串末尾

六、例题

例题1

最长特殊序列 Ⅰ

给你两个字符串 a 和 b,请返回 这两个字符串中 最长的特殊序列  的长度。如果不存在,则返回 -1 。

「最长特殊序列」 定义如下:该序列为 某字符串独有的最长子序列(即不能是其他字符串的子序列) 。

字符串 s 的子序列是在从 s 中删除任意数量的字符后可以获得的字符串。

  • 例如,"abc" 是 "aebdc" 的子序列,因为删除 "aebdc" 中斜体加粗的字符可以得到 "abc" 。 "aebdc" 的子序列还包括 "aebdc" 、 "aeb" 和 "" (空字符串)。

示例 1:

输入: a = "aba", b = "cdc"
输出: 3
解释: 最长特殊序列可为 "aba" (或 "cdc"),两者均为自身的子序列且不是对方的子序列。

示例 2:

输入:a = "aaa", b = "bbb"
输出:3
解释: 最长特殊序列是 "aaa" 和 "bbb" 。

示例 3:

输入:a = "aaa", b = "aaa"
输出:-1
解释: 字符串 a 的每个子序列也是字符串 b 的每个子序列。同样,字符串 b 的每个子序列也是字符串 a 的子序列。

提示:

  • 1 <= a.length, b.length <= 100
  • a 和 b 由小写英文字母组成

要解决这个问题,我们需要理解什么是特殊序列。

根据题目的定义,最长特殊序列是某个字符串独有的最长子序列,即不能是其他字符串的子序列。

我们可以按照以下思路来解决这个问题:

  1. 如果字符串 a 和字符串 b 相等,那么它们没有特殊序列,返回 -1。
  2. 否则,返回两个字符串长度的较大值,因为每个字符串本身就是它们自己的特殊序列,而不可能是对方的子序列。

在上述代码中,我们定义了一个函数 `findLUSlength` 来计算最长特殊序列的长度。在 `main` 函数中,我们给出了示例输入,然后调用 `findLUSlength` 函数来计算最长特殊序列的长度,并输出结果。

#include <stdio.h>
#include <string.h>int findLUSlength(char *a, char *b) {int lenA = strlen(a);int lenB = strlen(b);if (strcmp(a, b) == 0) {return -1;}return lenA > lenB ? lenA : lenB;
}int main() {char a[] = "aba";char b[] = "cdc";int result = findLUSlength(a, b);printf("最长特殊序列的长度为:%d\n", result);return 0;
}

例题2

URL化

URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。(注:用Java实现的话,请使用字符数组实现,以便直接在数组上操作。)

示例 1:

输入:"Mr John Smith    ", 13
输出:"Mr%20John%20Smith"

示例 2:

输入:"               ", 5
输出:"%20%20%20%20%20"

提示:

  • 字符串长度在 [0, 500000] 范围内。

 解法1:自己写的,但是超时了

#include <stdio.h>
#include <string.h>
char* replaceSpaces(char* S, int length) {int i = 0;for (i = 0; i < length; i++) {if (S[i] == ' ') {S[i] = '%';          int j=0;for(j=length-1;j>i;j--){S[j+2]=S[j];}	S[i+1] = '2';S[i+2] = '0';i += 2;  // 跳过已替换的字符length += 2;S[length]='\0';}}return S;
}int main() {char str[50000];fgets(str, sizeof(str), stdin);str[strlen(str) - 1] = '\0';printf("%s\n", replaceSpaces(str, strlen(str)));return 0;
}

解法2:未超时

#include <stdio.h>
#include <string.h>char* replaceSpaces(char* S, int length) {int spaceCount = 0;int i=0;for (i = 0; i < length; i++) {if (S[i] == ' ') {spaceCount++;}}int newLength = length + 2 * spaceCount;int newIndex = newLength - 1;for (i = length - 1; i >= 0; i--) {if (S[i] == ' ') {S[newIndex] = '0';S[newIndex - 1] = '2';S[newIndex - 2] = '%';newIndex -= 3;} else {S[newIndex] = S[i];newIndex--;}}S[newLength]='\0';return S;
}int main() {char str[50000];fgets(str, sizeof(str), stdin);str[strlen(str) - 1] = '\0';printf("%s\n", replaceSpaces(str, strlen(str)));return 0;
}

例题3

判断国际象棋棋盘中一个格子的颜色

给你一个坐标 coordinates ,它是一个字符串,表示国际象棋棋盘中一个格子的坐标。下图是国际象棋棋盘示意图。

如果所给格子的颜色是白色,请你返回 true,如果是黑色,请返回 false 。

给定坐标一定代表国际象棋棋盘上一个存在的格子。坐标第一个字符是字母,第二个字符是数字。

示例 1:

输入:coordinates = "a1"
输出:false
解释:如上图棋盘所示,"a1" 坐标的格子是黑色的,所以返回 false 。

示例 2:

输入:coordinates = "h3"
输出:true
解释:如上图棋盘所示,"h3" 坐标的格子是白色的,所以返回 true 。

示例 3:

输入:coordinates = "c7"
输出:false

提示:

  • coordinates.length == 2
  • 'a' <= coordinates[0] <= 'h'
  • '1' <= coordinates[1] <= '8'
#include <stdio.h>
#include <string.h>
#include <stdbool.h>  bool squareIsWhite(char* coordinates) {if (coordinates[0] == 'a' || coordinates[0] == 'c' || coordinates[0] == 'e' || coordinates[0] == 'g') {int num = coordinates[1] - '0';if (num % 2 == 0) {return true;} else {return false;}} else if (coordinates[0] == 'b' || coordinates[0] == 'd' || coordinates[0] == 'f' || coordinates[0] == 'h') {int num = coordinates[1] - '0';if (num % 2 == 0) {return false;} else {return true;}} else {return false;}
}int main() {char str[3];scanf("%2s", str);str[2] = '\0';if (squareIsWhite(str)) {printf("true\n");} else {printf("false\n");}return 0;
}

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

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

相关文章

【Java万花筒】Java安全卫士:从密码学到Web应用攻击

Java安全锦囊&#xff1a;从Web应用攻击到加密算法&#xff0c;助你建立强固的开发堡垒 前言 在当今数字化时代&#xff0c;安全性至关重要&#xff0c;特别是对于Java开发者而言。本文将深入探讨Java安全与加密领域的关键库和技术&#xff0c;包括Bouncy Castle、Jasypt、Ke…

网络协议与攻击模拟_05TCP协议

一、传输层知识回顾 &#xff11;、传输层的功能 定义应用层协议数据报文的端口号&#xff0c;流量控制对原始数据进行分段处理 &#xff12;、传输层提供的服务 传输连接服务数据传输服务、流量控制、差错控制、序列控制 &#xff13;、传输层的协议 面向连接的传输协议…

Qt6入门教程 5:添加资源和应用程序图标

目录 一.Qt资源系统&#xff08;Qt Resource System&#xff09; 1.Resource Collection Files&#xff08;.qrc&#xff09; 2.External Binary Resources 3.Compiled-In Resources 4.Resource Compiler (rcc) 5.在程序中使用资源 二.添加.qrc文件 1.添加.qrc 2.编辑…

AI剪辑助手:轻松剪辑专注创意,视频批量AI智剪的方法

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;在许多领域都展现出了强大的能力。在视频剪辑领域&#xff0c;AI剪辑助手的出现&#xff0c;给内容创作者带来了前所未有的便利。它不仅能快速、高效地完成视频剪辑工作&#xff0c;还能释放创造力。今天一起…

【HarmonyOS】网络数据请求连接与数据持久化操作

从今天开始&#xff0c;博主将开设一门新的专栏用来讲解市面上比较热门的技术 “鸿蒙开发”&#xff0c;对于刚接触这项技术的小伙伴在学习鸿蒙开发之前&#xff0c;有必要先了解一下鸿蒙&#xff0c;从你的角度来讲&#xff0c;你认为什么是鸿蒙呢&#xff1f;它出现的意义又是…

【SpringBoot实战专题】「开发实战系列」深入迁出探索剖析SpringBoot服务容器特性的利器之Actuator(Web端点)

深入迁出探索剖析SpringBoot服务容器特性的利器之Actuator 内容简介内容大纲Actuator Web端点洞察应用程序内部状况的关键Actuator提供了13个端点启用ActuatorMaven依赖Gradle依赖 Actuator透视组件装配过程获得Bean装配报告&#xff08;/beans&#xff09;Bean属性概览Bean报告…

目标跟踪算法的目标丢失与遮挡处理 - 注意力机制

目标跟踪算法在处理目标遮挡和丢失情况时&#xff0c;采用了多种技术和策略。这些技术主要集中在提高算法的鲁棒性和适应性上&#xff0c;使其能够在复杂环境中有效跟踪目标。以下是一些常见的处理方法&#xff1a; 多模型融合&#xff1a;通过结合多个跟踪模型或特征表示&…

Linux安装texlivetexstudio

linux下写paper神器&#xff0c;简单好用&#xff0c;装就完了&#xff0c;不要多问 一、安装Texlive texlive镜像下载&#xff0c;传送门。这里我们选择texlive2023-20230313.iso下载。cd到下载目录&#xff0c;挂载镜像sudo mount -o loop texlive2023-20230313.iso /mnt #…

数据脱敏(一) 基本概念

定义 数据脱敏&#xff0c;是对敏感数据进行变形处理&#xff0c;其目的是保护隐私数据等信息的安全。也称为数据漂白、数据去隐私化或数据变形&#xff0c;是一种技术机制&#xff0c;用于在给定的规则、策略下对敏感数据进行变换、修改&#xff0c;以隐藏敏感信息。数据脱敏的…

如何提升演讲能力

强大输入体系 固定时间进行同领域阅读&#xff0c;类似1万小时定律 提升输出能力 输出写作时&#xff0c;梳理你的业务逻辑&#xff0c;倒逼输入&#xff0c;遇到困难时输出&#xff0c;知识体系会更加完善 心流状态 写提纲一、二、三&#xff0c;提示整个链路 故事化 学…

常用的Docker命令

以下是一些常用的Docker命令&#xff1a; 镜像相关命令&#xff1a; 搜索镜像&#xff1a;docker search <镜像名称>拉取镜像&#xff1a;docker pull <镜像名称>列出本地镜像&#xff1a;docker images删除本地镜像&#xff1a;docker rmi <镜像ID> 容器相…

centos docker-compose安装教程-2024最新版 亲测可用

目录 长时间不安装,生疏了,再次记录下 1.下载 2.修改名称 3.提权 4.测试验证 长时间不安装,生疏了,再次记录下 1.下载 官网地址 docker-compose官网地址&#xff1a;https://docs.docker.com/compose/compose-file/compose-file-v3/ #进入目录 cd /usr/local/bin#下载 wg…

大数据学习(32)hive优化方法总结

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博主哦&#x1f91…

js解构方式

//这两种写法哪个更好 const { signInfo: { isdist, signType } {} } data || {}; const { signInfo: { isdist, signType }} data;这两种写法都是解构赋值的方式&#xff0c;用于从对象中提取嵌套属性。它们的区别在于当data为undefined或者null时的行为不同。 第一种写法…

xtu oj 1251 Colombian Number

题目描述 对于正整数n,不存在整数k,使得n等于k加上k的数码累加和&#xff0c;我们称这样的数是哥伦比亚数或者自我数。 比如 11就不是一个哥伦比亚数&#xff0c;因为10加上10的数码累加和1等于11;而20则是一个哥伦比亚数。 输入 第一行是一个整数K(K≤10,000)&#xff0c;表…

NI PXIe-6386国产替代,8路AI(16位,14 MS/s/ch),2路A​O,24路DIO,PXI多功能I/O模块

PXIe-6386 PXIe&#xff0c;8路AI&#xff08;16位&#xff0c;14 MS/s/ch&#xff09;&#xff0c;2路A​O&#xff0c;24路DIO&#xff0c;PXI多功能I/O模块 PXIe-6386是一款同步采样的多功能DAQ设备。该模块提供了模拟 I/O、数字I/O、四个32位计数器和模拟和数字触发。板载N…

每日一练 | 华为认证真题练习Day164

1、当两台BGP邻居协商的HOLD Time参数为0时&#xff0c;则不发送Keeplive报文。 A. 正确 B. 错误 2、ospf路由协议中&#xff0c;bandwidth-reference命令的单位是mbps。 A. 正确 B. 错误 3、在OSPF广播或者NBMA网络类型中&#xff0c;ROUTER PRIORITY大的设备不一定会成为…

C++排序算法概览

1. 冒泡排序 (1) 基本思路 冒泡排序是一种简单的、但效率极低的排序算法&#xff0c;基本思路是重复地遍历待排序的序列&#xff0c;通过相邻元素的比较和交换&#xff0c;将较大&#xff08;或较小&#xff09;的元素逐步"冒泡"到右侧&#xff08;或左侧&#xff0…

Qat++,轻量级开源C++ Web框架

目录 一.简介 二.编译Oat 1.环境 2.编译/安装 三.试用 1.创建一个 CMake 项目 2.自定义客户端请求响应 3.将请求Router到服务器 4.用浏览器验证 一.简介 Oat是一个面向C的现代Web框架 官网地址&#xff1a;https://oatpp.io github地址&#xff1a;https://github.co…

[网络安全]DHCP 部署与安全

一 、DHCP作用 (Dynamic HOst Configure Protocol ) 动态IP配置协议 作用:动态自动分配IP地址 二、DHCP相关概念 地址池/作用域: (IP、子网掩码、网关、DNS、周期) 三、DHCP优点 减少工程量 避免IP避免 提高地址利用率 四、DHCP原理 成为DHCP租约过程 步骤: 1.发送 DHC…