好渴鹅命令行
好渴鹅命令行
本代码仅能在 VC++ 23 的情况下通过编译并运行,可能会有小 bug。所有的文件必须放在同一个文件夹下。
Update
- 添加了清屏命令;
- 添加了查看版本命令;
- 添加了
cd命令。
本代码遵循 CC-BY-NC-ND (署名-非商业使用-禁止演绎)协议。(本协议最为严格,因为无法继续解析、翻译、转载。)
HString.h
#pragma once
#include <cstring>
#include <string>
using namespace std;
class HString {
private:
basic_string<char> __Str;
public:
HString() = default;
HString(basic_string<char> __Str) {
this->__Str = __Str;
}
HString(const char *__Str) {
this->__Str = __Str;
}
HString(const char __c) {
char __Str[2];
*__Str = __c;
this->__Str = __Str;
}
void push_back(char __x) {
__Str.push_back(__x);
}
void pop_back() {
__Str.pop_back();
}
char &operator[](size_t __id) {
return __Str[__id];
}
size_t size() {
return __Str.size();
}
const char *str() {
return __Str.c_str();
}
char &back() {
return __Str.back();
}
char &front() {
return __Str.front();
}
HString substring(size_t __Begin, size_t __Size) {
return __Str.substr(__Begin, __Size);
}
HString &operator+=(HString _Right) {
__Str += _Right.__Str;
return *this;
}
friend bool operator==(HString &_Left, HString &_Right) {
return _Left.__Str == _Right.__Str;
}
friend bool operator==(HString &_Left, string &_Right) {
return _Left.__Str == _Right;
}
friend bool operator==(HString &_Left, const char *_Right) {
return _Left.__Str == _Right;
}
friend HString operator+(HString &_Left, const char *_Right) {
return HString(_Left.__Str + _Right);
}
friend HString operator+(const char *_Left, HString &_Right) {
return HString(_Left + _Right.__Str);
}
friend ostream &operator<<(ostream &out, HString &__Str) {
out << __Str.__Str;
return out;
}
friend string &operator+=(string &__Left, HString __Right) {
return __Left += __Right.str();
}
};
HVector.h
#pragma once
#include <vector>
#include <initializer_list>
using namespace std;
template<typename _Ty>
class HVector {
private:
vector<_Ty> __Arr;
public:
HVector() = default;
HVector(initializer_list<_Ty> __List) {
__Arr = __List;
}
void push_back(_Ty __x) {
__Arr.push_back(__x);
}
void pop_back() {
__Arr.pop_back();
}
_Ty &operator[](size_t __id) {
return __Arr[__id];
}
size_t size() {
return __Arr.size();
}
_Ty &back() {
return __Arr.back();
}
_Ty &front() {
return __Arr.front();
}
};
header.h
#pragma once
#include <iostream>
#include <string>
#include <format>
#include <vector>
#include <windows.h>
#include <conio.h>
#include <print>
#include "HVector.h"
#include "HString.h"
#define EndLine() cout << endl
#define SentenceError() println("语句错误!若想查看手册,请输入-help")
using namespace std;
const string Version = "2023.1.1.1";
string Dir = "Haokee";
vector<string> 语录{"它是文明美公鸡,一口一个大可爱。——好渴鹅", "X-i-a-o-B-i--a-n-t-a-i-就是我!"};
void InitConsole() {
SetConsoleTitle(L"命令行 - 好渴鹅");
srand(time(nullptr));
println("Haokee Command. [版本 {}]", Version);
println("(c) Haokee Corporation。保留所有权利。");
cout << endl;
}
HVector<HString> Split(HString __Str) {
HVector<HString> __Vec;
__Vec.push_back("");
char __Last = -1;
for (int i = 0; i < __Str.size(); i++) {
if (__Str[i] == 32 && __Last != 32) {
__Last = __Str[i], __Vec.push_back("");
} else {
__Vec.back().push_back(__Str[i]);
}
}
return __Vec;
}
HString ToLower(HString __Str) {
for (int i = 0; i < __Str.size(); i++) {
if (isupper(__Str[i])) {
__Str[i] = tolower(__Str[i]);
}
}
return __Str;
}
HVector<HString> ToLower(HVector<HString> __Vec) {
for (int i = 0; i < __Vec.size(); i++) {
__Vec[i] = ToLower(__Vec[i]);
}
return __Vec;
}
bool HStringCheck(HString __Str, HVector<HString> __Table) {
for (int i = 0; i < __Table.size(); i++) {
if (__Str == __Table[i]) {
return 1;
}
}
return 0;
}
namespace Help {
void Clear() {
println("-a, -all: 清屏所有区域");
println("-e, -every: 清理当前窗口并关闭");
println("-h, -help: 寻求帮助");
}
}
namespace Operation {
void Haokee(HVector<HString> __Vec) {
if (__Vec.size() == 2) {
if (HStringCheck(__Vec[1], { "-v", "-version" })) {
println("Haokee Command. [版本 {}]", Version);
println("(c) Haokee Corporation。保留所有权利。");
} else if (HStringCheck(__Vec[1], { "-n", "-new", "-s", "-start"})) {
system("start .\\好渴鹅命令行交互.exe");
} else if (HStringCheck(__Vec[1], { "-h", "-help" })) {
println("-v, -version: 查看命令行版本");
println("-n, -new, -s, -start: 打开新窗口");
} else {
SentenceError();
}
} else {
SentenceError();
}
EndLine();
}
void Clear(HVector<HString> __Vec) {
if (__Vec.size() == 1) {
system("cls");
InitConsole();
} else if (__Vec.size() == 2) {
if (HStringCheck(__Vec[1], { "-a", "-all"})) {
system("cls");
} else if (HStringCheck(__Vec[1], { "-e", "-every"})) {
exit(0);
} else if (HStringCheck(__Vec[1], { "-h", "-help" })) {
Help::Clear();
} else {
SentenceError();
}
} else {
SentenceError();
}
EndLine();
}
void SwitchDir(HVector<HString> __Vec) {
if (__Vec.size() == 2) {
if (__Vec[1].front() == '.') {
Dir += __Vec[1].substring(2, __Vec[1].size() - 2);
} else {
Dir = __Vec[1].str();
}
} else {
println("目录格式错误!");
}
EndLine();
}
void 每日一言() {
int p = rand() % 语录.size();
println("{}", 语录[p]);
}
}
void Main() {
string Str;
HVector<HString> Word;
while (1) {
print("{}>", Dir);
getline(cin, Str);
Word = Split(Str);
if (!Word.size()) {
continue;
}
Word = ToLower(Word);
if (HStringCheck(Word.front(), { "haokee", "hke" })) {
Operation::Haokee(Word);
} else if (HStringCheck(Word.front(), { "cls", "clear", "clr" })) {
Operation::Clear(Word);
} else if (HStringCheck(Word.front(), { "cd", "goto" })) {
Operation::SwitchDir(Word);
} else if (HStringCheck(Word.front(), { "stc", "每日一言" })) {
Operation::每日一言();
}
}
}
main.cpp
#include "header.h"
int main() {
InitConsole();
Main();
return 0;
}

浙公网安备 33010602011771号