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++ 实现简单的文章续写

头文件:

#pragma once
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
#include <time.h>
#include <windows.h> 
using namespace std;
class dataClass {
public:
	string former;
	string latter[50] = { "\0" };
	int latterCount = 0;
};

//文件读入
string streamIn(int &countArray, int former_len, int latter_len, dataClass*);   
//对读入的文件进行前后缀分析
void streamAnalyse(string fullText, int &countArray, int former_len, int latter_len, dataClass*);    
//输出文章
void streamOut(string fullText, int &countArray, int former_len, int latter_len, dataClass*);

C++_Big_1.cpp

//main函数
#include "Head.h"
//void test(dataClass*);

const int NUM_DATA = 700;
int main() {
#pragma comment(linker, "/STACK:873741824")
	string fullText;
	dataClass dataArray[NUM_DATA];
	int var = 0;
	int countArray;
	countArray = 0;
	int former_len, latter_len;    //前缀词长度和后缀词长度
	cout << "请输入前缀长度:" << endl;
	cin >> former_len;
	cout << "请输入后缀长度:" << endl;
	cin >> latter_len;
	fullText = streamIn(countArray, former_len, latter_len, dataArray);
	streamOut(fullText, countArray, former_len, latter_len, dataArray);
	cout << endl;
	
	
	//test(dataArray);    //用于测试内存极限
	//cout << dataArray[0].former;    

	return 0;
}

stream.cpp

#include "Head.h"

/*
重写输入和分析函数
1.读入文件,存储在一个string中
2.对该string对象进行分析
3.按用户给定的前缀长度和后缀长度进行读入
	3.1循环开始后前缀按上一个后缀赋值
	3.2遇到"\n"时后缀停止并记录后缀指针长度用于前缀指针前进
*/

void streamAnalyse(string fullText, int& countArray, int former_len, int latter_len, dataClass* dataArray) {
	int textPoint = 0, loopCount, pointLength = 2 * former_len, loopCountCopy;
	const char* char_fullText;
	char temp[1000] = "\0";
	char_fullText = fullText.c_str();	//文件存在一个string中
	string tempFormer, tempLatter;
	do {
		//前缀检查
		for (loopCount = 0; loopCount < pointLength; loopCount++)
			temp[loopCount] = char_fullText[textPoint + loopCount];
		temp[loopCount] = '\0';
		tempFormer = temp;
		//后缀检查
		loopCountCopy = loopCount;
		for (loopCount = 0; loopCount < 2 * latter_len && char_fullText[textPoint + loopCountCopy + loopCount] != ' '; loopCount++) {
			temp[loopCount] = char_fullText[textPoint + loopCountCopy + loopCount];
		}
		loopCountCopy = loopCount;
		for (loopCount = 0; loopCount < loopCountCopy; loopCount++)
			temp[loopCount] = char_fullText[textPoint + loopCountCopy + loopCount];
		temp[loopCount] = '\0';
		tempLatter = temp;
		//指针检查
		for (loopCount = 0; loopCount < 2 * former_len && char_fullText[textPoint + loopCount] != ' '; loopCount++) {}
		if (loopCount == 2 * former_len)
			pointLength = 2 * former_len;
		else if (loopCount == 0) {
			textPoint += 1;
			pointLength = 2 * former_len;
		}
		else
			pointLength = loopCount;
		//前缀查重
		for (loopCount = 0; loopCount < countArray && dataArray[loopCount].former != tempFormer; loopCount++) {}
		if (loopCount == countArray) {
			dataArray[countArray].former = tempFormer;
			dataArray[countArray].latter[0] = tempLatter;
			dataArray[countArray].latterCount++;
			countArray++;
		}
		else {
			if (dataArray[loopCount].latterCount > 49) {
				textPoint += pointLength;
				continue;
			}
			dataArray[loopCount].latter[dataArray[loopCount].latterCount] = tempLatter;
			dataArray[countArray].latterCount++;
		}
		textPoint += pointLength;
	} while ((textPoint + former_len) < fullText.length());
}

/*
重写输出函数_2
0.初始化随机数
1.进入循环
	1.1取随机数
	1.2按顺序遍历所有前缀,随机输出其后缀
	1.3到达指定字数后停止
*/

void streamOut(string fullText, int& countArray, int former_len, int latter_len, dataClass* dataArray) {
	srand(time(0));
	int randNum, loopCount, textPoint = 0, pointLength, count = 0;
	const char* char_fullText;
	char temp[1000] = "\0";
	char_fullText = fullText.c_str();
	string start, temp_string;
	cout << "请输入启动词(如:春天等):" << endl;
	cin >> start;
	cout << "    " << start;
	for (loopCount = 0; dataArray[loopCount].former != start && loopCount < countArray; loopCount++) {}
	if (loopCount == countArray) {
		cout << "语料库中不存在该启动词!";
		return;
	}
	else {
		randNum = rand() % dataArray[loopCount].latterCount;
		cout << dataArray[loopCount].latter[randNum];
	}
	do {
		//指针检查
		for (loopCount = 0; loopCount < 2 * former_len && char_fullText[textPoint + loopCount] != ' '; loopCount++) {}
		if (loopCount == 2 * former_len)
			pointLength = 2 * former_len;
		else if (loopCount == 0) {
			textPoint += 1;
			pointLength = 2 * former_len;
		}
		else
			pointLength = loopCount + 1;
		for (loopCount = 0; loopCount < pointLength; loopCount++)
			temp[loopCount] = char_fullText[textPoint + loopCount];
		temp[loopCount] = '\0';
		for (loopCount = 0; dataArray[loopCount].former != temp && loopCount < countArray; loopCount++) {}
		if (loopCount == countArray) {
			loopCount = rand() % countArray;
			randNum = rand() % dataArray[loopCount].latterCount;
			cout << dataArray[loopCount].latter[randNum];
		}
		else {
			randNum = rand() % dataArray[loopCount].latterCount;
			cout << dataArray[loopCount].latter[randNum];
		}
		textPoint += pointLength;
		count++;
		Sleep(12);
	}while ((textPoint + former_len) <= fullText.length()-2);
}

string streamIn(int& countArray, int former_len, int latter_len, dataClass* dataArray) {
	string fullText;
	const char* char_fullText;
	ifstream  infile;
	//读入并分析
	infile.open("D:\\spring_data_in\\1.txt", ios::in);
	infile >> fullText;
	char_fullText = fullText.c_str();
	streamAnalyse(fullText, countArray, former_len, latter_len, dataArray);
	infile.close();
	return fullText;
}

?

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-24 00:48:42  更:2022-03-24 00:51:33 
 
开发: 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/26 11:49:28-

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