GCC校友交作业记得改一下我还没交!!!🤗🤗🤗
Visual Studio编译环境
一、实验目的
1.理解模块化设计思想,熟悉流程图的使用;
2.掌握字符串的基础操作:
- 字符串显示输出;
- 查找指定字符;
- 插入字符;
- 删除指定字符;
- 替换字符;
- 串拼接
- 求子串
- 模式匹配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再尝试。
?功能截图:
?
?
?
?
?
如果有用的话可以给一个小赞吗🤭
|