【基础数据结构】字符串

一、字符串输入

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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度强化学习的变道策略:Harmonious Lane Changing via Deep Reinforcement Learning

偏理论&#xff0c;假设情况不易发生 摘要 多智能体强化学习的换道策略&#xff0c;不同的智能体在每一轮学习后交换策略&#xff0c;达到零和博弈。 和谐驾驶仅依赖于单个车辆有限的感知结果来平衡整体和个体效率&#xff0c;奖励机制结合个人效率和整体效率的和谐。 Ⅰ. 简…

数据仓库面试题

1 思维导图&数仓常见面试题 2 题目 1. 数据仓库是什么&#xff1f; 数据仓库是一个面向主题的&#xff08;订单、支付、退单等&#xff09;、集成的&#xff08;整合多个信息源的大量数据&#xff09;、非易失的&#xff08;一般不会进行删除和修改操作&#xff09;且随时…

基于NLP的恶意网页识别

基于NLP的恶意网页识别 基于NLP的恶意网页识别引言项目目录回顾优化HTML标签提取结果使用预训练模型Fine-tune数据处理和模型训练模型训练与评估模型导出部署与预测总结 基于NLP的恶意网页识别 引言 欢迎阅读《 基于NLP的恶意网页识别》&#xff0c;在前三篇中&#xff0c;我…

【LV12 DAY21 PWM实验】

PWM控制—脉冲宽度调制 通过对脉冲宽度的调制&#xff0c;来获得所需要的波形。 #include "exynos_4412.h"void delay(unsigned int time){while(time--);}int main(){//1.配置GPD0_0 PWM输出功能GPD0.CONGPD0.CON &(~(0XF)) | 0X2;//2.设置PWM一级分频100P…

Flask框架小程序后端分离开发学习笔记《1》网络知识

Flask框架小程序后端分离开发学习笔记《1》网络知识 Flask是使用python的后端&#xff0c;由于小程序需要后端开发&#xff0c;遂学习一下后端开发。 一、网址组成介绍 协议&#xff1a;http&#xff0c;https (https是加密的http)主机&#xff1a;g.cn zhihu.com之类的网址…

视频转码:最简单的批量MP4视频转换方法,视频剪辑的技巧

随着数字媒体技术的快速发展&#xff0c;视频格式的转换和编辑已成为日常生活中常见的需求。经常遇到要把不同格式的视频转换成MP4格式的情况&#xff0c;例如在某些播放器或设备上播放&#xff0c;或者传输和分享。接下来看下云炫AI智剪如何简单的批量转换MP4视频方法&#xf…

实战案例 - 医疗行业攻击面发现及管理

HIS 入侵案例 医院委托第三方安全公司进行渗透测试 公网域名发现 HIS 系统&#xff0c;通过域名访问并进行入侵 植入木马后&#xff0c;被 HIDS 发现并处置 通过 HIDS 发现 HIS 系统存在已知安全漏洞 通报院方负责人进行处理 院方负责人 仅关闭对应系统域名解析 HW 演练时…

爬虫IP代理池的搭建与使用指南

目录 前言 一、IP代理池的搭建 1. 安装依赖库 2. 获取代理IP 3. 验证代理IP 4. 搭建代理池 5. 定时更新代理池 二、使用IP代理池 总结 前言 在进行网络爬虫任务时&#xff0c;为了避免被目标网站封禁IP&#xff0c;我们可以使用IP代理池来进行IP的轮换&#xff0c;达…

linux修改文件名

1.使用 mv 命令&#xff1a;mv 命令用于移动或重命名文件。要重命名一个文件&#xff0c;你可以将原始文件名作为第一个参数&#xff0c;新的文件名作为第二个参数传递给 mv 命令。例如&#xff0c;要将 oldfile.txt 重命名为 newfile.txt&#xff0c;可以运行以下命令&#xf…

【江科大STM32合集】day2按键控制LED光敏传感器控制峰鸣器

【STM32合集】day2按键控制LED&光敏传感器控制峰鸣器 电路基础c语言基础main.ckey.c结果 实现一个键开关灯实验结果避坑 电路基础 运算放大器-在江科大51单片机b站视频&#xff08;AD/DA&#xff09;复习 原理&#xff1a;两个极端 同相输入端电压 》反相输入端 电压输出最…

3DMax的位图是什么? 3DMax的位图介绍

在3dmax建模中&#xff0c;使用贴图时的位图的频率是很高的。主要原因便就是位图就是我们平常说的图片&#xff0c;有各种格式的图片&#xff0c;能把这张图片贴到物体的表面&#xff0c;呈现效果进行渲染。 3damx的位图支持多种格式&#xff0c;比如jpg、png等等。 当然常用的…

第8章-第4节-Java中字节流的缓冲流

1、缓冲流&#xff1a;属于高级IO流&#xff0c;并不能直接读写数据&#xff0c;需要依赖于基础流。缓冲流的目的是为了提高文件的读写效率&#xff1f;那么是如何提高文件的读写效率的呢&#xff1f; 在内存中设置一个缓冲区&#xff0c;缓冲区的默认大小是8192字节&#xff…

HarmonyOS4.0 系列——06、渲染之条件渲染、循环渲染以及懒加载渲染

HarmonyOS4.0 系列——06、渲染之条件渲染、循环渲染以及懒加载渲染 if/else&#xff1a;条件渲染 ArkTS 提供了渲染控制的能力。条件渲染可根据应用的不同状态&#xff0c;使用 if、else 和 else if 渲染对应状态下的 UI 内容。 写法和 TS 的一样&#xff0c;简单看一下即可…

java的object类

object类 看下object类的结构&#xff1a; Object是所有类的父类&#xff0c;任何类都默认继承Object。在Java中&#xff0c;如果没有指定父类&#xff0c;则默认为Object。这是因为Object类是Java中最基本的类&#xff0c;也是所有类的祖先 public String toString() : 这…

Windows下Python+PyCharm+miniconda+Cuda/GPU 安装步骤

1. 官网安装Python 3.9 Python Release Python 3.9.0 | Python.org 2. 安装pycharm https://download.jetbrains.com/python/pycharm-professional-2023.3.2.exe 3. 安装miniconda Miniconda — miniconda documentation 4. 安装完miniconda 创建虚拟环境 conda create …

Linux命令之用户账户管理whoami,useradd,passwd,chage,usermod,userdel的使用

1、查看当前用户账户 2、切换用户为root用户 3、新建用户user1&#xff0c;给用户user1设置密码为password123 4、新建用户user2&#xff0c;UID为510&#xff0c;指定其所属的私有组为group1&#xff08;group1组的标识符为500&#xff09;&#xff0c;用户的主目录为/home/us…

6.1810: Operating System Engineering 2023 <Lab7 lock: Parallelism/locking>

一、本节任务 二、要点 2.1 文件系统&#xff08;file system&#xff09; xv6 文件系统软件层次如下&#xff1a; 通过路径树我们可以找到相应的文件&#xff1a; fd&#xff08;文件描述符&#xff09;是进程用来标识其打开的文件的手段&#xff0c;每个进程有自己的文件…

C++学习笔记(三十三):c++ 宏定义

本节对c的宏定义进行描述。c使用预处理器来对宏进行操作&#xff0c;我们可以写一些宏来替换代码中的问题&#xff0c;c的宏是以#开头&#xff0c;预处理器会将所有的宏先进行处理&#xff0c;之后在通过编译器进行编译。宏简单说就是文本替换&#xff0c;可以替换代码中的任何…

高级分布式系统-第15讲 分布式机器学习--概念与学习框架

高级分布式系统汇总&#xff1a;高级分布式系统目录汇总-CSDN博客 分布式机器学习的概念 人工智能蓬勃发展的原因&#xff1a;“大” 大数据&#xff1a;为人工智能技术的发展奠定了坚实的物质基础。 大规模机器学习模型&#xff1a;具备超强的表达能力&#xff0c;可以解决…

CMU15-445-Spring-2023-Project #3 - 前置知识(lec10-14)

Lecture #10_ Sorting & Aggregation Algorithms Query Plan 数据库系统会将 SQL 编译成查询计划。查询计划是一棵运算符树。 Sorting DBMS 需要对数据进行排序&#xff0c;因为根据关系模型&#xff0c;表中的tuple没有特定的顺序。排序使用 ORDER BY、GROUP BY、JOIN…