【基础数据结构】字符串

news2025/2/25 17:06:05

一、字符串输入

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.coloradmin.cn/o/1383159.html

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

相关文章

Jeson nano--安装使用摄像头csi/usb

Jeson nano--安装使用摄像头 一、 安装使用摄像头二、vscode调用摄像头总结 一、 安装使用摄像头 列出与视频设备相关的设备文件 ls /dev/video*显示与 /dev/video0 设备关联的摄像头支持的所有格式及其详细信息。可以查看输出以了解所支持的分辨率、帧率和像素格式等信息。请…

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

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

超详细的嵌入式cJSON使用注意事项,持续补充中......

文章目录 一、堆内存不足1.1 问题描述1.2 解决办法 二、内存泄露2.1 忘记Delete2.2 忘记Free2.3 串口数据接收缺少部分字符导致的内存泄露(自己的问题)问题分析 2.4 内存泄露在Cortex-M3内核会发生什么&#xff1f; cJSON开源库地址&#xff1a; cJSON 一、堆内存不足 1.1 问…

ssh 远程登录协议

一、SSH 服务 1.1 SSH 基础 SSH&#xff08;Secure Shell&#xff09;是一种安全通道协议&#xff0c;主要用来实现字符界面的远程登录、远程 复制等功能。SSH 协议对通信双方的数据传输进行了加密处理&#xff0c;其中包括用户登录时输入的用户口令&#xff0c;SSH 为建立在应…

mongoose6.0版以上操作mongodb数据库的基本使用

1、介绍 Mongoose 是一个对象文档模型库&#xff0c;官网 http://www.mongoosejs.net/ 2、作用 方便使用代码操作 mongodb 数据库 3、使用流程 3.1、链接数据库 //1. 安装 mongoose---> npm install mongoose --save//2. 导入 mongoose const mongoose require(&quo…

PiflowX-DorisWrite组件

DorisWrite组件 组件说明 往Doris存储写入数据。 计算引擎 flink 组件分组 doris 端口 Inport&#xff1a;默认端口 outport&#xff1a;默认端口 组件属性 名称展示名称默认值允许值是否必填描述例子fenodesFenodes“”无是Doris FE http地址&#xff0c; 支持多个…

PLC-IoT 网关开发札记(4):Xamarin Forms 实现自定义控件(一个开关)

1. 需求 物联网项目中要集成大量的设备&#xff0c;作为一种简单的数字孪生手段&#xff0c;每一型号的设备都需要一个对应的虚拟实现&#xff0c;也就是用界面把这个设备呈现出来。设备有多个可管理的“属性”&#xff0c;对这个设备的监测对应获取这个设备“属性”的值&…

Linux系统编程(十一):高级 IO

参考引用 UNIX 环境高级编程 (第3版)嵌入式Linux C应用编程-正点原子 Linux系统编程&#xff08;文章链接汇总&#xff09; 1. 非阻塞 I/O 阻塞就是进入了休眠状态&#xff0c;交出了 CPU 控制权阻塞 I/O 就是对文件的 I/O 操作&#xff08;读写操作&#xff09;是阻塞式的&a…

FGSM方法生成交通信号牌的对抗图像样本

背景&#xff1a; 生成对抗样本&#xff0c;即扰动图像&#xff0c;让原本是“停车”的信号牌识别为“禁止驶入” 实验准备 模型&#xff1a;找一个训练好的&#xff0c;识别交通信号牌的CNN模型&#xff0c;灰度图像 模型地址&#xff1a;GitHub - Daulettulegenov/TSR_CNN:…

高级RAG(六): 句子-窗口检索

之前我们介绍了LlamaIndex的从小到大的检索 的检索方法&#xff0c;今天我们再来介绍llamaindex的另外一种高级检索方法: 句子-窗口检索(Sentence Window Retrieval)&#xff0c;在开始介绍之前让我们先回顾一下基本的RAG检索的流程&#xff0c;如下图所示&#xff1a; 在执行基…

学会编写自定义configure脚本,轻松实现定制化配置

学会编写自定义configure脚本&#xff0c;轻松实现定制化配置 一、configure脚本的作用和重要性二、configure脚本的基本结构和语法三、编写自定义configure脚本的步骤四、示例五、常见的问题总结 一、configure脚本的作用和重要性 configure脚本是用于自动配置软件源代码的脚…

jmeter如何做接口测试?

Jmeter介绍&测试准备&#xff1a; Jmeter介绍&#xff1a;Jmeter是软件行业里面比较常用的接口、性能测试工具&#xff0c;下面介绍下如何用Jmeter做接口测试以及如何用它连接MySQL数据库。 前期准备&#xff1a;测试前&#xff0c;需要安装好Jmeter以及jdk并配置好jdk环…

高级JavaScript。同步和异步,阻塞和非阻塞

同步阻塞 同步非阻塞 异步阻塞 异步非阻塞 在当什么是同步和异步&#xff0c;阻塞与非阻塞的概念还没弄清楚之前&#xff0c;更别提上面这些组合术语了&#xff0c;只会让你更加困惑。 同步和异步 同步和异步其实指的是&#xff0c;请求发起方对消息结果的获取是主动发起…

强化学习应用(五):基于Q-learning算法的无人车配送路径规划(通过Python代码)

一、Q-learning算法介绍 Q-learning是一种强化学习算法&#xff0c;用于解决基于环境的决策问题。它通过学习一个Q-table来指导智能体在不同状态下采取最优动作。下面是Q-learning算法的基本步骤&#xff1a; 1. 定义环境&#xff1a;确定问题的状态和动作空间&#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…

2024年【G1工业锅炉司炉】考试及G1工业锅炉司炉考试资料

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 G1工业锅炉司炉考试根据新G1工业锅炉司炉考试大纲要求&#xff0c;安全生产模拟考试一点通将G1工业锅炉司炉模拟考试试题进行汇编&#xff0c;组成一套G1工业锅炉司炉全真模拟考试试题&#xff0c;学员可通过G1工业锅…

【现代密码学】笔记3.1-3.3 --规约证明、伪随机性《introduction to modern cryphtography》

【现代密码学】笔记3.1-3.3 --规约证明、伪随机性《introduction to modern cryphtography》 写在最前面私钥加密与伪随机性 第一部分密码学的计算方法论计算安全加密的定义&#xff1a;对称加密算法 伪随机性伪随机生成器&#xff08;PRG&#xff09; 规约法规约证明 构造安全…

LeetCode刷题.15(哈希表与计数排序解决41. 缺失的第一个正数)

给你一个未排序的整数数组 nums &#xff0c;请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,0] 输出&#xff1a;3 示例 2&#xff1a; 输入&#xff1a;nums …

MCS-51---串行通信的特点

目录 一.同步通信和异步通信 1.异步通信 2.同步通信 二.串行通信的方式 1.单工 2.半双工 3.全双工 三.串行通信的速率 四.MCS-51单片机结构 五.串行口的控制 1.串行口控制寄存器(SCON) 2.电源控制寄存器(PCON) 六.波特率的设计 七.串行口的工作方式 1.方式0 2.…

NLP论文阅读记录 - WOS | ROUGE-SEM:使用ROUGE结合语义更好地评估摘要

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.相关工作三.本文方法四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结 前言 ROUGE-SEM: Better evaluation of summarization using ROUGE combin…