parent
0f10a88a6b
commit
12cd67a899
@ -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 |
@ -0,0 +1,14 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<project version="4"> |
||||||
|
<component name="PublishConfigData" remoteFilesAllowedToDisappearOnAutoupload="false"> |
||||||
|
<serverData> |
||||||
|
<paths name="remote_linux (563cc454-127a-4c53-a847-5bf281087bb1)"> |
||||||
|
<serverdata> |
||||||
|
<mappings> |
||||||
|
<mapping local="$PROJECT_DIR$" web="/" /> |
||||||
|
</mappings> |
||||||
|
</serverdata> |
||||||
|
</paths> |
||||||
|
</serverData> |
||||||
|
</component> |
||||||
|
</project> |
@ -0,0 +1,4 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<project version="4"> |
||||||
|
<component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" /> |
||||||
|
</project> |
@ -0,0 +1,8 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<project version="4"> |
||||||
|
<component name="ProjectModuleManager"> |
||||||
|
<modules> |
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/work20220401.iml" filepath="$PROJECT_DIR$/.idea/work20220401.iml" /> |
||||||
|
</modules> |
||||||
|
</component> |
||||||
|
</project> |
@ -0,0 +1,6 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<project version="4"> |
||||||
|
<component name="VcsDirectoryMappings"> |
||||||
|
<mapping directory="$PROJECT_DIR$/.." vcs="Git" /> |
||||||
|
</component> |
||||||
|
</project> |
@ -0,0 +1,2 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<module classpath="CMake" type="CPP_MODULE" version="4" /> |
@ -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) |
@ -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; |
||||||
|
} |
@ -0,0 +1,127 @@ |
|||||||
|
//
|
||||||
|
// Created by lenfrex on 2022/4/4.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include <cstring> |
||||||
|
#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; |
||||||
|
} |
@ -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
|
Loading…
Reference in new issue