当前位置: 首页 > 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;三个线程同时执…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

JavaScript 数据类型详解

JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型&#xff08;Primitive&#xff09; 和 对象类型&#xff08;Object&#xff09; 两大类&#xff0c;共 8 种&#xff08;ES11&#xff09;&#xff1a; 一、原始类型&#xff08;7种&#xff09; 1. undefined 定…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...