diff --git a/work20220401/.idea/.gitignore b/work20220401/.idea/.gitignore
new file mode 100644
index 0000000..1c2fda5
--- /dev/null
+++ b/work20220401/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/work20220401/.idea/deployment.xml b/work20220401/.idea/deployment.xml
new file mode 100644
index 0000000..771f492
--- /dev/null
+++ b/work20220401/.idea/deployment.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/work20220401/.idea/misc.xml b/work20220401/.idea/misc.xml
new file mode 100644
index 0000000..f1c67df
--- /dev/null
+++ b/work20220401/.idea/misc.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/work20220401/.idea/modules.xml b/work20220401/.idea/modules.xml
new file mode 100644
index 0000000..e2f5241
--- /dev/null
+++ b/work20220401/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/work20220401/.idea/vcs.xml b/work20220401/.idea/vcs.xml
new file mode 100644
index 0000000..2e3f692
--- /dev/null
+++ b/work20220401/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/work20220401/.idea/work20220401.iml b/work20220401/.idea/work20220401.iml
new file mode 100644
index 0000000..6d70257
--- /dev/null
+++ b/work20220401/.idea/work20220401.iml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/work20220401/CMakeLists.txt b/work20220401/CMakeLists.txt
new file mode 100644
index 0000000..d337362
--- /dev/null
+++ b/work20220401/CMakeLists.txt
@@ -0,0 +1,6 @@
+cmake_minimum_required(VERSION 3.21)
+project(work20220401)
+
+set(CMAKE_CXX_STANDARD 14)
+
+add_executable(work20220401 main.cpp neoString/CString.cpp neoString/CString.h)
diff --git a/work20220401/main.cpp b/work20220401/main.cpp
new file mode 100644
index 0000000..50a9e1d
--- /dev/null
+++ b/work20220401/main.cpp
@@ -0,0 +1,29 @@
+#include "iostream"
+#include "neoString/CString.h"
+
+using namespace std;
+
+int main() {
+ int n, i, j;
+ while (cin >> n) {
+ CString *c = new CString[n + 2];
+ for (i = 0; i < n; i++) {
+ cin >> c[i];
+ }
+ for (i = 0; i < n - 1; i++) {
+ for (j = 0; j < n - i - 1; j++) {
+ if (c[j] > c[j + 1]) {
+ c[n] = c[j];
+ c[j] = c[j + 1];
+ c[j + 1] = c[n];
+ }
+ }
+ }
+ for (i = 0; i < n; i++) {
+ c[n + 1] += c[i];
+ }
+ cout << c[n + 1] << endl;
+ delete[] c;
+ }
+ return 0;
+}
\ No newline at end of file
diff --git a/work20220401/neoString/CString.cpp b/work20220401/neoString/CString.cpp
new file mode 100644
index 0000000..3aa1b71
--- /dev/null
+++ b/work20220401/neoString/CString.cpp
@@ -0,0 +1,127 @@
+//
+// Created by lenfrex on 2022/4/4.
+//
+
+#include
+#include "CString.h"
+
+/*
+ * 按照给定大小来初始化字符串数据
+ */
+CString::CString(int length) {
+ data = new char[length]();
+ CString::length = length;
+}
+
+CString::~CString() {
+ delete[] data;
+}
+
+/*
+ * 不设定初始化大小就默认512个字符来初始化
+ */
+CString::CString() : CString(512) {}
+
+/*
+ * 重载等号。借鉴了Java中String类的equal()方法的实现。
+ * 首先比较两字符串长度,如果长度不一样不用说,直接返回false;如果data为nullptr,不做比较并返回false
+ * 相同的话再比较两字符串数据指针指向地址是否一样,一样就代表指向的是同一块内存,直接返回true
+ * 两者都不同才进行逐字比较
+ */
+bool CString::operator==(const CString &source) const {
+ // 判断两CString长度以及本对象data成员是否为空指针
+ if (source.length != length || data == nullptr) {
+ return false;
+ } else {
+ // 判断两对象data成员是否指向同一内存块
+ if (source.data == data) {
+ return true;
+ }
+ }
+
+ // 以上情况都不符合时才进行逐字比较
+ int compareLength = source.length < length ? source.length : length;
+ for (int i = 0; i < compareLength; ++i) {
+ if (data[i] != source.data[i]) {
+ return false;
+ }
+ }
+ return true;
+}
+
+/*
+ * 从源中复制字符串来构建新的对象
+ */
+CString::CString(char *source) : CString((int)strlen(source)) {
+ strncpy(data, source, length);
+}
+
+/*
+ * 从源中复制字符串来构建新的对象,并定义初始长度,小于源字符串则会被截取
+ */
+CString::CString(char *source, int length) : CString(length) {
+ strncpy(data, source, length);
+}
+
+CString &CString::operator=(const CString &source) {
+ // 处理自己给自己赋值的情况,那叫啥,自赋值
+ if (this == &source) {
+ return *this;
+ }
+
+ if (data != nullptr && length != 0) {
+ delete[] data;
+ }
+
+ this->length = source.length;
+ this->data = new char[length]();
+
+ strncpy(data, source.data, length);
+
+ return *this;
+}
+
+CString &CString::operator+=(const CString &source) {
+ if (data == nullptr && length == 0) {
+ this->length = source.length;
+ this->data = new char[length]();
+ }
+
+ char *tmp = new char[length]();
+ strncpy(tmp, data, length);
+
+ // 重新分配内存,防止拼接后溢出
+ delete[] data;
+ this->length += source.length;
+ this->data = new char[this->length];
+
+ strcpy(tmp, data);
+ strncat(data, source.data, source.length);
+
+ return *this;
+}
+
+CString::CString(const CString &source) : CString(source.data, source.length) {}
+
+/*
+ * 按照字典顺序逐字对比
+ */
+bool CString::operator<(const CString &source) const {
+ // 这部分类似于前边==重载的前置判断
+ if (source.length != length || data == nullptr) {
+ return false;
+ } else {
+ if (source.data == data) {
+ return true;
+ }
+ }
+
+ // 以上情况都不符合时才进行逐字比较
+ int compareLength = source.length < length ? source.length : length;
+ for (int i = 0; i < compareLength; ++i) {
+ if (data[i] < source.data[i]) {
+ return true;
+ }
+ }
+ return false;
+}
diff --git a/work20220401/neoString/CString.h b/work20220401/neoString/CString.h
new file mode 100644
index 0000000..940217b
--- /dev/null
+++ b/work20220401/neoString/CString.h
@@ -0,0 +1,38 @@
+//
+// Created by lenfrex on 2022/4/4.
+//
+
+#ifndef WORK20220401_CSTRING_H
+#define WORK20220401_CSTRING_H
+
+#include "utility"
+
+using namespace std::rel_ops;
+class CString {
+private:
+ char *data = nullptr;
+ int length = 0;
+public:
+ explicit CString(int length);
+
+ CString(char *data, int length);
+
+ explicit CString(char *source);
+
+ CString(const CString &source);
+
+ CString();
+
+ ~CString();
+
+ bool operator==(const CString &source) const;
+
+ bool operator<(const CString &source) const;
+
+ CString &operator+=(const CString &source);
+
+ CString &operator=(const CString &source);
+};
+
+
+#endif //WORK20220401_CSTRING_H