数据结构(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人同时购买,三个线程同时执…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...
R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...
vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...
GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...
QT开发技术【ffmpeg + QAudioOutput】音乐播放器
一、 介绍 使用ffmpeg 4.2.2 在数字化浪潮席卷全球的当下,音视频内容犹如璀璨繁星,点亮了人们的生活与工作。从短视频平台上令人捧腹的搞笑视频,到在线课堂中知识渊博的专家授课,再到影视平台上扣人心弦的高清大片,音…...
