数据结构(c语言版本) 字符串操作
作业要求
创建字符串插入、字符串、字符定位、求字串、删除某个字符、替换某个字符串、合并两个字符串
代码实现
#include <stdio.h>
#include <string.h>
#define MAXSIZE 100//定义结构体
struct SeqString{char data[MAXSIZE];int charlen;
};//初始化
void init(struct SeqString *SS){SS->charlen = 0;SS->data[SS->charlen] = '\0';
}//输出字符串
void print_str(struct SeqString *SS){//判空if(SS->charlen == 0){printf("空字符串!\n");return;}printf("字符串为:");for(int i=0; i < SS->charlen; i++){printf("%c",SS->data[i]);}printf("\n");
}//插入数据
void StrInsert(struct SeqString *SS, char *strs, int count){// 判满if(SS->charlen >= MAXSIZE){if((SS->charlen + count) >= MAXSIZE){printf("插入的字符串过长\n");return;}printf("字符串已经满,不能再插入数据了\n");return;}char *temp = strs;for(int i=0; i<count; i++){SS->data[SS->charlen] = temp[i];SS->charlen ++;}SS->data[SS->charlen] = '\0';printf("插入数据成功!\n");print_str(SS);
}//串的定位
void StrIndex(struct SeqString *SS, char C){struct SeqString *tmp = SS;int index = 0;int flag = 0;while (tmp->data[index] != '\0'){if(tmp->data[index] == C){printf("%c 在字符串中出现的位置为:%d\n", C, index+1);flag = 1;}index ++;}if(flag == 0){printf("%c 不在字符串中\n", C);}
}//求子串
void SubStr(struct SeqString *SS, char *sonstr){//判断子串存在if(strlen(sonstr)<0){printf("子串不存在!\n");return;}//判断字串是否大于父串if(strlen(sonstr)>(SS->charlen-1)){printf("子串大于父串!\n");return;}struct SeqString *tmp = SS;int index = 0;while (tmp->data[index] != '\0'){if(tmp->data[index] == sonstr[0]){int s_index = 0;for(int i=index; i<(index+strlen(sonstr)); i++){printf("父%d -->%c",i,tmp->data[i]);printf(" 子%d -->%c\n",s_index+1, sonstr[s_index]);if(tmp->data[i] != sonstr[s_index]){break;}s_index ++;}if(s_index == (strlen(sonstr))){printf("是子串!\n");return;}}index ++;}printf("不是子串!\n");
}//删除某个字符
void DelStr(struct SeqString *SS, char del_c){struct SeqString *tmp = SS;int index = 0;while (tmp->data[index] != '\0'){if(tmp->data[index] == del_c){int i = index;while (tmp->data[i] != '\0'){tmp->data[i] = tmp->data[i+1];i ++;}tmp->data[i] = '\0';index --;}index ++;}
}//替换某个字符串
void RepStr(struct SeqString *SS, char *y_t_c){struct SeqString *tmp = SS;int index = 0;while (tmp->data[index] != '\0'){if(tmp->data[index] == y_t_c[0]){tmp->data[index] = y_t_c[1];}index ++;}
}//合并两个字符串
void MergeStr(int s1_len,int s2_len,int s3_len,char *S1,char *S2,char *S3){if((s1_len+s2_len) > s3_len){printf("合并失败:第一个字符串和第二个字符串长度和超过第三个字符串长度\n");return;}int index=0;for(int i=0;i<s1_len;i++){S3[index] = S1[i];index ++;}for(int j=0;j<s2_len;j++){S3[index] = S2[j];index ++;}printf("合并后的字符串为:");for(int k=0;k<=index;k++){printf("%c",S3[k]);}}int main(){struct SeqString SS;init(&SS);printf("**************输入字符串操作**************\n");//输入字符串,计算字符串长度char strs[10];printf("请输入字符串(不超过100个字符):");scanf("%s", strs);int num = strlen(strs) + 1;printf("字符串长度为:%d\n", num);printf("\n**************插入字符串操作**************\n");//插入数据StrInsert(&SS, strs, num);printf("\n**************查找字符串操作**************\n");//字符串定位char c;printf("请输入需要查找的字符:");scanf("%s",&c);StrIndex(&SS, c);printf("\n**************求子串操作**************\n");printf("父串 ");print_str(&SS);char sonstr[100];printf("请输入字串(最大长度为100):");scanf("%s",sonstr);SubStr(&SS, sonstr);printf("\n**************删除某个字符操作**************\n");printf("原 ");print_str(&SS);printf("请输入需要删除的字符:");char del_c;scanf("%s",&del_c);DelStr(&SS, del_c);printf("删除后 ");print_str(&SS);printf("\n**************替换某个字符操作**************\n");printf("原 ");print_str(&SS);printf("请输入原字符和替换字符:");char y_t_c[2];scanf("%s",y_t_c);RepStr(&SS, y_t_c);printf("替换后 ");print_str(&SS);printf("\n**************两个字符串合并操作**************\n");int s1_len,s2_len,s3_len;printf("请输入第一个字符串的长度:");scanf("%d",&s1_len);printf("请输入第二个字符串的长度:");scanf("%d",&s2_len);printf("请输入第三个字符串的长度:");scanf("%d",&s3_len);char S1[s1_len], S2[s2_len], S3[s3_len];printf("请输入第一个字符串:");scanf("%s",S1);printf("请输入第二个字符串:");scanf("%s",S2);MergeStr(s1_len,s2_len,s3_len,S1,S2,S3);
}
运行结果
**************输入字符串操作**************
请输入字符串(不超过100个字符):asdfghjkl
字符串长度为:10**************插入字符串操作**************
插入数据成功!
字符串为:asdfghjkl**************查找字符串操作**************
请输入需要查找的字符:d
d 在字符串中出现的位置为:3**************求子串操作**************
父串 字符串为:asdfghjkl
请输入字串(最大长度为100):ghj
父4 -->g 子1 -->g
父5 -->h 子2 -->h
父6 -->j 子3 -->j
是子串!**************删除某个字符操作**************
原 字符串为:asdfghjkl
请输入需要删除的字符:f
删除后 字符串为:asdghjkl**************替换某个字符操作**************
原 字符串为:asdghjkl
请输入原字符和替换字符:aA
替换后 字符串为:Asdghjkl**************两个字符串合并操作**************
请输入第一个字符串的长度:5
请输入第二个字符串的长度:7
请输入第三个字符串的长度:13
请输入第一个字符串:qwert
请输入第二个字符串:zxcvbnm
合并后的字符串为:qwertzxcvbnm
相关文章:
数据结构(c语言版本) 字符串操作
作业要求 创建字符串插入、字符串、字符定位、求字串、删除某个字符、替换某个字符串、合并两个字符串 代码实现 #include <stdio.h> #include <string.h> #define MAXSIZE 100//定义结构体 struct SeqString{char data[MAXSIZE];int charlen; };//初始化 void …...
【Pyqt5】windows和linux安装Pyqt5+designer
原文作者:我辈李想 版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。 文章目录 一、windows安装二、linux安裝linux 安装pyqt5 designer 一、windows安装 PyCharm安装PyQt5及其工具(Qt Designer、PyUIC、PyRcc…...

【FPGA】Verilog:升降计数器 | 波纹计数器 | 约翰逊计数器 | 实现 4-bit 升降计数器的 UP/DOWN
目录 Ⅰ. 理论部分 0x00 升降计数器(UP DOWN Counter) 0x01 波纹计数器(Ripple Counter) 0x02 约翰逊计数器(Johnson Counter) Ⅱ. 实践部分 0x00 实现:升降计数器(4-bit&…...

使用uniapp写小程序,真机调试的时候不显示log
项目场景: 当小程序文件太大的情况下使用真机调试,但是真机调试的调试器没有任何反应 问题描述 使用uniapp写小程序,真机调试的时候不显示log 原因分析: 提示:因为真机调试的时候没有压缩文件,所以调试的…...
hive数据库delete删除部分数据/删除分区内的数据
Hive delete 删除部分数据 一、hive删除数据1.1、删除整个表1.2、删除表中的特定行1.3、删除表中的特定分区1.4、删除分区内的部分数据1.5、清空表中的所有数据 二、扩展2.1、dynamic partition on Crud si not disabled, please set hive.crud.dynamic.partitiontrue to enabl…...
C/C++条件编译:#ifdef、#else、#endif等
文章目录 #undef指令从C预处理器角度看已定义条件编译1.#ifdef、#else和#endif指令 #ifndef指令#ifndef指令通常用于防止多次包含一个文件程序使用#ifndef避免文件被重复包含 #if和#elif指令条件编译还有一个用途是让程序更容易移植 参考 程序员可能要为不同的工作环境准备C程序…...

基于51单片机步进电机节拍步数正反转LCD1602显示( proteus仿真+程序+原理图+设计报告+讲解视频)
基于51单片机步进电机节拍步数正反转LCD1602显示 📑1. 主要功能:📑2. 讲解视频:📑3. 仿真📑4. 程序代码📑5. 设计报告📑6. 设计资料内容清单&&下载链接📑[资料下…...

Vim 从何而来?
Vim 编辑器的创造者、维护者和终身领导者 Bram Moolenaar 为了纪念这位杰出的荷兰程序员,我们今天来聊一聊 Vim 的历史。 Vim 无处不在。它被很多人使用。同时 Vim 可能是世界上 “最难用的软件之一” ,但是又多次被程序员们评价为 最受欢迎的 代码编辑…...
Auto.js 清除指定应用缓存
本文所有教程及源码、软件仅为技术研究。不涉及计算机信息系统功能的删除、修改、增加、干扰,更不会影响计算机信息系统的正常运行。不得将代码用于非法用途,如侵立删!Auto.js 清除指定应用缓存 环境 win10Pixel4Android13var packageName = ""; // 包名 var resu…...
[EFI]Surface Pro 4电脑 Hackintosh 黑苹果引导文件
硬件型号驱动情况主板Surface Pro 4处理器Intel Core i5-6300U 2.5GHz已驱动内存16GB DDR4 2400Mhz已驱动硬盘Samsung SSD 860 EVO 250G Media (Install on SSD External)已驱动显卡Intel HD Graphics 520 2GBmacOS 13以上自行添加显卡补丁声卡Realtek ALC3269(id 3…...

【Java 进阶篇】深入浅出:JQuery 事件绑定的奇妙世界
在前端的世界里,事件是不可或缺的一部分。用户的点击、输入、滚动等行为都触发着各种事件,而如何在代码中捕捉并处理这些事件是每位前端开发者必须掌握的技能之一。本文将带你深入浅出,探索 JQuery 中的事件绑定,为你揭开这个奇妙…...
Pair用法示例:
这里用到了 org.apache.commons.lang3.tuple.Pair 来封装数据(就是不想自己再写一个 DO 或者 VO 或者 MO) 在Java中,Pair是一种简单的数据结构,用于存储两个相关联的值。它没有特定的内置类,但可以通过自定义实现或使…...
rpc依赖安装
依赖: 0、boost:用于实现多线程等; 1、protobuf:用于实现数据的序列化、反序列化,也用于定义和生成rpc数据及接口; 2、libevent:用于实现基于IO多路复用机制的网络事件循环。 其实可以直接用包…...
文件存储服务 实时通信服务 HTTP通信协议
目录 文件存储服务实时通信服务HTTP通信协议 👍 点赞,你的认可是我创作的动力! ⭐️ 收藏,你的青睐是我努力的方向! ✏️ 评论,你的意见是我进步的财富! 文件存储服务 文件存储服务是一种用于…...

Redis - 订阅发布替换 Etcd 解决方案
为了减轻项目的中间件臃肿,由于我们项目本身就应用了 Redis,正好 Redis 的也具备订阅发布监听的特性,正好应对 Etcd 的功能,所以本次给大家讲解如何使用 Redis 消息订阅发布来替代 Etcd 的解决方案。接下来,我们先看 R…...

Hessian协议详解
前言 Hessian协议是一种基于二进制的轻量级远程调用协议,用于在分布式系统中进行跨语言的通信。它使用简单的二进制格式来序列化和反序列化数据,并支持多种编程语言,如Java、C#、Python等。Hessian协议相对于其他协议的优势在于其简单性和高…...

【AI视野·今日Sound 声学论文速览 第三十六期】Mon, 30 Oct 2023
AI视野今日CS.Sound 声学论文速览 Mon, 30 Oct 2023 Totally 7 papers 👉上期速览✈更多精彩请移步主页 Daily Sound Papers Style Description based Text-to-Speech with Conditional Prosodic Layer Normalization based Diffusion GAN Authors Neeraj Kumar, A…...

Android Jetpack的组件介绍,常见组件解析
jetpack组件有哪些 Android Jetpack是一个集成Android应用程序组件的一站式解决方案。它使开发人员能够专注于他们的应用程序的真正创新部分,而不会受到Android平台特定的限制。Jetpack组件可分为四个类别: 架构组件(Architecture Componen…...

ImportError: cannot import name ‘url_quote‘ from...
👨🏻💻 热爱摄影的程序员 👨🏻🎨 喜欢编码的设计师 🧕🏻 擅长设计的剪辑师 🧑🏻🏫 一位高冷无情的编码爱好者 大家好,我是全栈工…...

一文看分布式锁
为什么会存在分布式锁? 经典场景-扣库存,多人去同时购买一件商品,首先会查询判断是否有剩余,如果有进行购买并扣减库存,没有提示库存不足。假如现在仅存有一件商品,3人同时购买,三个线程同时执…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...

网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...