/*定义一个类,用于对10个字符串进行管理。要求:
(1)在定义对象时,能够为字符串清空;
(2)定义变换构造函数,能够为字符串赋以给定的字符串;
(3)定义复制构造函数;
(4)定义成员函数,能够为字符串输入数据;
(5)定义成员函数,能够将字符串显示出来;
(6)定义成员函数,用于找出每个字符串中的最小值(ASCII码最小的字符)及其个数,最小值由函数值返回,个数由参数带回;
(7)定义成员函数,用于为字符串按从小到大顺序排序。
(8)定义main函数,合理地调用上述每个函数。*/
#include
#include
#include
#define NUM 10
using namespace std;
class cString
{
private:
string str[NUM];
public:
cString();
cString(string s[NUM]);
cString(const cString &s);
//~cString();
char* min_char(int num[]);
void sort();
void input();
void disp();
};
char ch[NUM];
cString::cString()
{
for (int i = 0; i < NUM; i++) {
str[i] = "";
}
}
cString::cString(string s[NUM])
{
for (int i = 0; i < NUM; i++) {
str[i] = s[i];
}
}
cString::cString(const cString& s)
{
for (int i = 0; i < 10; i++) {
str[i] = s.str[i];
}
}
char* cString::min_char(int num[])
{
for (int i = 0; i < NUM; i++) {
ch[i] = str[i][0];
num[i] = 0;
for (int j = 0; str[i][j] != '\0'; j++){
if (str[i][j] < ch[i]){
ch[i] = str[i][j];
num[i] = 0;
}
if (str[i][j] == ch[i])
num[i]++;
}
}
return ch;
}
void cString::sort()
{
cout << "字符串排序" << endl;
int i = 9; //初始时,最后位置保持不变
while (i> 0)
{
int pos = 0; //每趟开始时,无记录交换
for (int j = 0; j < i; j++) {
if (str[j]>str[j + 1]){
pos = j; //记录交换的位置
string tmp = str[j]; str[j] = str[j + 1]; str[j + 1] = tmp;
}
}
i = pos; //为下一趟排序作准备
}
disp();
}
void cString::input()
{
cout << "请输入" << NUM << "个字符串:"<< endl;
for (int i = 0; i < NUM; i++) {
cin >> str[i];
}
}
void cString::disp()
{
cout << "字符串组如下:" << endl;
for (int i = 0; i < NUM; i++) {
cout << str[i] << endl;
}
}
int main()
{
string s[NUM] = { "a11","s22","d33","f44","g55","h66","j77","k88","l99","a00" };
cString str1;//缺省构造并清零
str1.input();
cout << "str1 ";
str1.disp();
int num[NUM] = { 0 };
char* min_ch = str1.min_char(num);
cout << "最小值及对应个数依次为: " << endl;
for (int i = 0; i < NUM; i++) {
cout << min_ch[i] << '\t' << num[i] << endl;
}
cString str2(s);
cout << "str2 ";
str2.disp();
cString str3 = str2;//变换构造函数
cout << "str3 ";
str3.disp();
str3.sort();
system("pause");
return 0;
}