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

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

嵌入式常见 CPU 架构

架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集&#xff0c;单周期执行&#xff1b;低功耗、CIP 独立外设&#xff1b;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel&#xff08;原始…...

git: early EOF

macOS报错&#xff1a; Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...