IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 字符串处理系统的设计与实现(C语言) -> 正文阅读

[C++知识库]字符串处理系统的设计与实现(C语言)

GCC校友交作业记得改一下我还没交!!!🤗🤗🤗

Visual Studio编译环境

一、实验目的

1.理解模块化设计思想,熟悉流程图的使用;

2.掌握字符串的基础操作:

  1. 字符串显示输出;
  2. 查找指定字符;
  3. 插入字符;
  4. 删除指定字符;
  5. 替换字符;
  6. 串拼接
  7. 求子串
  8. 模式匹配BF算法。

二、实验内容

1.分析系统功能,根据功能模块图选择2个模块画出流程图;

2.设计系统主界面,要求选择菜单对应数字进入相应功能:

3.定义一个字符串数组,使其具有如下功能:

(1) 读取文档,输出字符串;

(2) 查找某个字符在字符串中出现的字数以及位置;

(3) 在字符串的指定位置插入一个字符;

(4) 删除字符串中的某个字符;

(5) 将字符串中的某个字符替换成指定字符,如把所有的字符a替换成c。

(6) 字符串拼接,定义三个字符串T,S1,S2,将S1,S2复制到T中,注意:先放入S1,后放入S2.

(7) 求字符串字串,用Sub返回串S的第pos个字符起长度为len的字串。

(8) 找字串T第一次出现在主串S中的位置并返回。


Dec C++和VS编译器创建项目都要创建C++项目:
?VS:
VS2019如何创建C++项目?_Gemini-zero的博客-CSDN博客_vs2019怎么创建c++项目打开VS2019,选择空项目后,点击下一步(如果没有找到空项目,说明你下载的时候没勾选C++模块)输入项目名,更改项目存放路径后,选择下一步选择C++文件,修改程序名称,点击添加找到“解决方案资源管理器”,右键点击源文件,选择添加新建项此时可以开始编写C++程序了...https://blog.csdn.net/qq_44364832/article/details/105820626

Dec c++:?
https://jingyan.baidu.com/article/fd8044fae80db55031137a07.htmlhttps://jingyan.baidu.com/article/fd8044fae80db55031137a07.html


?这是我的vs框架


创建头文件 struct.h 定义数据类型和存储结构

#pragma once

#ifndef __STRUCT_H__
#define __STRUCT_H__
#define MAXLEN 255
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;

typedef struct {
	char ch[MAXLEN + 1];
	int length;
}SString;

#endif

创建 function_declare.h 头文件把所有的方法函数声明

#pragma once

#ifndef __FUNCTION_H__
#define __FUNCTION_H__

//从txt文件读取内容到串中
Status read_string(SString* S);
//字符串显示
void ShowString(SString S);
//查找指定字符
void FindString(SString S);
//插入字符
void InsertString(SString& S);
//删除指定字符
void DeleteString(SString& S);
//替换字符
void ReplaceString(SString& S);
//串拼接
void TogetherString(SString& S);
//求子串
void FindSonString(SString S);
//模式匹配BF算法
void MatchedBFAlgorithm(SString S);
//修改txt
Status updata_book(SString* S);

#endif

创建 file_operation.cpp 源文件读取本程序文件夹目录中名为data2.txt的txt文本文件

#include<stdio.h>
#include<string.h>
#include"struct.h"

//从txt文件读取内容到串中
Status read_string(SString* S) {
	int i = 1;
	FILE* fp;
	if ((fp=fopen("data2.txt","r")) == NULL) {
		puts("打开文件失败\a\n");
		return ERROR;
	}
	if (fgets(S->ch, MAXLEN, fp) != NULL) {
		S->length = strlen(S->ch);
	}
	fclose(fp);
	return OK;
}

//修改txt
Status updata_book(SString *S) {
	int i = 0;
	int len = S->length;
	FILE* fp;
	if ((fp = fopen("data2.txt", "w+")) == NULL) {
		puts("打开文件失败\a\n");
		return ERROR;
	}
	rewind(fp);
	while (len) {
		fprintf(fp, "%c", S->ch[i]);
		len--;
		i++;
	}
	fclose(fp);
	printf("txt文件修改成功\n");
}

创建 stringoperation.cpp源文件编写系统的功能

#include <string.h>
#include<stdlib.h>
#include <stdio.h>
#include "struct.h"

//1字符串显示
void ShowString(SString S) {
	int i;
	printf("字符串显示:");
	for (i = 0; i < S.length; i++) {
		printf("%c", S.ch[i]);
	}printf("\n");
}

//2查找指定字符
void FindString(SString S) {
	char c;
	int j = 0;
	int num=0;
	bool h = false;
	int location[MAXLEN+1];
	printf("要查找的字符:");
	getchar();
	scanf("%c", &c);
	for (int i = 0; i < S.length; i++) {
		if (c == S.ch[i]) {
			location[j] = i;
			h = true;
			num++;
			j++;
		}
	}
	if (h) {
		printf("字符 %c 在字符串中出现在位置", c);
		for (int i = 0; i < j; i++) {
			printf(" %d ", location[i]+1);
		}
		printf("中\n");
		printf("有 %d 个\n", num);
	}
	else {
		printf("没有找到该字符\n\a");
	}
}

//3插入字符
void InsertString(SString &S) {
	int len = S.length;
	char c;
	int location;
	printf("插入的字符:");
	getchar();
	scanf("%c", &c);
	printf("插入的位置:");
	getchar();
	scanf("%d", &location);
	if (location-1 > S.length) {
		printf("位置输入有误\n\a");
		return;
	}
	for (; (len-1) != (location-2); len--) {
		S.ch[len]=S.ch[len-1];
	}
	S.ch[location-1]=c;
	S.length++;
	printf("插入成功\n");
	ShowString(S);
}

//4删除指定字符(所有字符)
void DeleteString(SString& S) {
	char c;
	int j;
	bool h = false;
	printf("删除的字符:");
	getchar();
	scanf("%c", &c);
	for (int i = 0; i < S.length; i++) {
		if (S.ch[i] == c) {
			h = true;
			j = i;
			for (; j < S.length; j++) {
				S.ch[j] = S.ch[j + 1];
			}
			i--;
			S.length--;
		}
	}
	if (h) {
		printf("删除成功\n");
		ShowString(S);
	}
	else {
		printf("字符串中没有该字符\a\n");
	}
}

//5替换字符(所有字符)
void ReplaceString(SString& S) {
	char oldc;
	char newc;
	int j;
	bool h = false;
	printf("替换掉的字符:");
	getchar();
	scanf("%c", &oldc);
	printf("替换成的字符:");
	getchar();
	scanf("%c", &newc);
	for (int i = 0; i < S.length; i++) {
		if (S.ch[i] == oldc) {
			h = true;
			S.ch[i] = newc;
		}
	}
	if (h) {
		printf("替换成功\n");
		ShowString(S);
	}
	else {
		printf("字符串中没有该字符\a\n");
	}
}

//6串拼接
void TogetherString(SString& S) {
	char S1[MAXLEN + 1], S2[MAXLEN + 1], T[MAXLEN + 1];
	int i = 0, j = 0;
	printf("输入S1:");
	scanf("%s", S1);
	printf("输入S2:");
	scanf("%s", S2);
	while (S1[i] != '\0') {
		T[i] = S1[i];
		i++;
	}
	while (S2[j] != '\0') {
		T[i] = S2[j];
		i++;
		j++;
	}
	if (i + j - 1 > MAXLEN + 1) {
		printf("拼接失败,字符串过长\n\a");
		return;
	}
	T[i] = '\0';
	i = 0;
	printf("载体T拼接成功:");
	while (T[i] != '\0') {
		printf("%c", T[i]);
		i++;
	}
	printf("\n");
}

//7求子串
void FindSonString(SString S) {
	char Sub[MAXLEN + 1];
	int len, pos,i=0;
	printf("输入提取的起始位pos:");
	scanf("%d",&pos);
	printf("想要获取的长度:");
	scanf("%d", &len);
	int lastLocation=pos - 1 + len;
	for (; pos <= lastLocation; pos++) {
		Sub[i]=S.ch[pos-1];
		i++;
		Sub[i] = '\0';
	}
	printf("子串:");
	i = 0;

	while (Sub[i] != '\0') {
		printf("%c", Sub[i]);
		i++;
	}
	printf("\n");
}

//8模式匹配BF算法
void MatchedBFAlgorithm(SString S) {
	char T[MAXLEN + 1];
	int start;
	printf("输入子串:");
	scanf("%s", T);
	int sonLen = 0,fatherLen=0;
	while ((sonLen != strlen(T)) && (fatherLen != S.length)) {
		if (S.ch[fatherLen] == T[sonLen]) {
			fatherLen++;
			sonLen++;
		}
		else {
			sonLen = 0;
			fatherLen++;
		}
	}
	if (sonLen == strlen(T)) {
		start=fatherLen - sonLen;
		printf("该子串的起始位置为:%d\n", start+1);
	}
	else {
		printf("没有该子串\n\a");
	}
}



//(1) 读取文档,输出字符串;y
//(2) 查找某个字符在字符串中出现的字数以及位置;y
//(3) 在字符串的指定位置插入一个字符;y
//(4) 删除字符串中的某个字符;y
//(5) 将字符串中的某个字符替换成指定字符,如把所有的字符a替换成c。y
//(6) 字符串拼接,定义三个字符串T, S1, S2,将S1, S2复制到T中,注意:先放入S1,后放入S2.
//(7) 求字符串子串,用Sub返回串S的第pos个字符起长度为len的子串。
//(8) 找子串T第一次出现在主串S中的位置并返回。

创建主函数 main.cpp 源文件编写界面并执行程序

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"struct.h"
#include"function_declare.h"

int main() {
	int num;
	SString S;
	read_string(&S);
	printf("--按任意键进入主菜单--\n");
	getchar();
	while (1) {
		system("cls");
		printf("============主菜单=========\n");
		printf("0、退出\n");
		printf("1、显示字符串信息\n");
		printf("2、查找指定字符\n");
		printf("3、插入字符\n");
		printf("4、删除指定字符(所有字符)\n");
		printf("5、替换字符(所有字符)\n");
		printf("6、串拼接\n");
		printf("7、求子串\n");
		printf("8、模式匹配BF算法\n");
		printf("9、修改txt文档\n");
		printf("-----------------------------------\n");
		printf("请输入需要的功能序号:");
		scanf("%d", &num);
		printf("-----------------------------------\n");
		switch (num) {
		case 0:
			system("cls");
			printf("===已退出!===\n");
			system("pause");
			return 0;
		case 1:
			ShowString(S);
			system("pause");
			break;
		case 2:
			FindString(S);
			system("pause");
			break;
		case 3:
			InsertString(S);
			system("pause");
			break;
		case 4:
			DeleteString(S);
			system("pause");
			break;
		case 5:
			ReplaceString(S);
			system("pause");
			break;
		case 6:
			TogetherString(S);
			system("pause");
			break;
		case 7:
			FindSonString(S);
			system("pause");
			break;
		case 8:
			MatchedBFAlgorithm(S);
			system("pause");
			break;
		case 9:
			updata_book(&S);
			system("pause");
			break;
		default:
			printf("输入错误,请重新输入!\n");
			system("pause");
			break;
		}
	}
	return 0;
}

测试文本放到本项目的目录上即可

?提示:如果读写文本出现乱码,可能是你的文本编码格式跟编译器对应不上,新建一个新的.txt再尝试。


?功能截图:

?

?

?

?

?

字符串操作的应用,与文章配套-C++文档类资源-CSDN下载字符串操作的应用,与文章配套更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/weixin_55797565/85083869

如果有用的话可以给一个小赞吗🤭

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-07 22:27:40  更:2022-04-07 22:28:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 23:40:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码