当前位置: 首页 > news >正文

数据结构(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

原文作者&#xff1a;我辈李想 版权声明&#xff1a;文章原创&#xff0c;转载时请务必加上原文超链接、作者信息和本声明。 文章目录 一、windows安装二、linux安裝linux 安装pyqt5 designer 一、windows安装 PyCharm安装PyQt5及其工具&#xff08;Qt Designer、PyUIC、PyRcc…...

【FPGA】Verilog:升降计数器 | 波纹计数器 | 约翰逊计数器 | 实现 4-bit 升降计数器的 UP/DOWN

目录 Ⅰ. 理论部分 0x00 升降计数器&#xff08;UP DOWN Counter&#xff09; 0x01 波纹计数器&#xff08;Ripple Counter&#xff09; 0x02 约翰逊计数器&#xff08;Johnson Counter&#xff09; Ⅱ. 实践部分 0x00 实现&#xff1a;升降计数器&#xff08;4-bit&…...

使用uniapp写小程序,真机调试的时候不显示log

项目场景&#xff1a; 当小程序文件太大的情况下使用真机调试&#xff0c;但是真机调试的调试器没有任何反应 问题描述 使用uniapp写小程序&#xff0c;真机调试的时候不显示log 原因分析&#xff1a; 提示&#xff1a;因为真机调试的时候没有压缩文件&#xff0c;所以调试的…...

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显示 &#x1f4d1;1. 主要功能&#xff1a;&#x1f4d1;2. 讲解视频&#xff1a;&#x1f4d1;3. 仿真&#x1f4d1;4. 程序代码&#x1f4d1;5. 设计报告&#x1f4d1;6. 设计资料内容清单&&下载链接&#x1f4d1;[资料下…...

Vim 从何而来?

Vim 编辑器的创造者、维护者和终身领导者 Bram Moolenaar 为了纪念这位杰出的荷兰程序员&#xff0c;我们今天来聊一聊 Vim 的历史。 Vim 无处不在。它被很多人使用。同时 Vim 可能是世界上 “最难用的软件之一” &#xff0c;但是又多次被程序员们评价为 最受欢迎的 代码编辑…...

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&#xff08;id 3…...

【Java 进阶篇】深入浅出:JQuery 事件绑定的奇妙世界

在前端的世界里&#xff0c;事件是不可或缺的一部分。用户的点击、输入、滚动等行为都触发着各种事件&#xff0c;而如何在代码中捕捉并处理这些事件是每位前端开发者必须掌握的技能之一。本文将带你深入浅出&#xff0c;探索 JQuery 中的事件绑定&#xff0c;为你揭开这个奇妙…...

Pair用法示例:

这里用到了 org.apache.commons.lang3.tuple.Pair 来封装数据&#xff08;就是不想自己再写一个 DO 或者 VO 或者 MO&#xff09; 在Java中&#xff0c;Pair是一种简单的数据结构&#xff0c;用于存储两个相关联的值。它没有特定的内置类&#xff0c;但可以通过自定义实现或使…...

rpc依赖安装

依赖&#xff1a; 0、boost&#xff1a;用于实现多线程等&#xff1b; 1、protobuf&#xff1a;用于实现数据的序列化、反序列化&#xff0c;也用于定义和生成rpc数据及接口&#xff1b; 2、libevent&#xff1a;用于实现基于IO多路复用机制的网络事件循环。 其实可以直接用包…...

文件存储服务 实时通信服务 HTTP通信协议

目录 文件存储服务实时通信服务HTTP通信协议 &#x1f44d; 点赞&#xff0c;你的认可是我创作的动力&#xff01; ⭐️ 收藏&#xff0c;你的青睐是我努力的方向&#xff01; ✏️ 评论&#xff0c;你的意见是我进步的财富&#xff01; 文件存储服务 文件存储服务是一种用于…...

Redis - 订阅发布替换 Etcd 解决方案

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

Hessian协议详解

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

【AI视野·今日Sound 声学论文速览 第三十六期】Mon, 30 Oct 2023

AI视野今日CS.Sound 声学论文速览 Mon, 30 Oct 2023 Totally 7 papers &#x1f449;上期速览✈更多精彩请移步主页 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应用程序组件的一站式解决方案。它使开发人员能够专注于他们的应用程序的真正创新部分&#xff0c;而不会受到Android平台特定的限制。Jetpack组件可分为四个类别&#xff1a; 架构组件&#xff08;Architecture Componen…...

ImportError: cannot import name ‘url_quote‘ from...

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是全栈工…...

一文看分布式锁

为什么会存在分布式锁&#xff1f; 经典场景-扣库存&#xff0c;多人去同时购买一件商品&#xff0c;首先会查询判断是否有剩余&#xff0c;如果有进行购买并扣减库存&#xff0c;没有提示库存不足。假如现在仅存有一件商品&#xff0c;3人同时购买&#xff0c;三个线程同时执…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...