数据结构与算法——字典序最小问题(用string类实现)

来源:互联网 发布:淘宝上签证怎么办理 编辑:程序博客网 时间:2024/05/01 22:08



思路:将源字符串str反转得到 rstr;然后比较两个字符串的大小,比如,如果str小,则将str的第一个字符加入min_str的后面,并将str的第一个字符删除;直到min_str的长度等于str;

主要是学习string类的成员函数:begin(), end(), rbegin(), rend(), front(), erase(), push_back();



linux代码以及运行结果:

/*************************************************************************    > File Name: best_cow_line.cpp    > Author:     > Mail:      > Created Time: 2015年12月13日 星期日 16时51分44秒 ************************************************************************/#include<iostream>#include <string>using namespace std;/*输入数据*/int input_data(int * len, string & str){cout << "string length: ";cin >> *len;cout << "string: ";cin >> str;return 0;}/*该函数仅仅是用于验证输入的数据是否正确*/void output_data(int *len, string & str){cout << "string length is " << *len << endl;cout << "string is " << str << endl;}/*得到最小的字符串*/void solve(int *len, string & str, string & min_str){string rstr(str.rbegin(), str.rend());//cout << "rstr is " << rstr << endl;int num = *len;while(num > 0){if(str < rstr){      //如果求最大字符串,应该为str > rstr//min_str.push_back(str.front());min_str.push_back(*str.begin());str.erase(str.begin());}else{min_str.push_back(*rstr.begin());rstr.erase(rstr.begin());}num--;}}int main(){int str_len = 0;string str;string min_str;int ret = 0;ret = input_data(&str_len, str);if(ret < 0){cout << "input the data error" << endl;}solve(&str_len, str, min_str);cout << "min str is: " << min_str << endl;//cout << "output the data: " << endl;//output_data(&str_len, str);return 0;}



windows系统下:

/*************************************************************************> File Name: best_cow_line.cpp> Author:> Mail:> Created Time: 2015年12月13日 星期日 16时51分44秒************************************************************************/#include<iostream>#include <string>using namespace std;/*输入数据*/int input_data(int * len, string & str){cout << "string length: ";cin >> *len;cout << "string: ";cin >> str;return 0;}/*该函数仅仅是用于验证输入的数据是否正确*/void output_data(int *len, string & str){cout << "string length is " << *len << endl;cout << "string is " << str << endl;}/*得到最小的字符串*/void solve(int *len, string & str, string & min_str){string rstr(str.rbegin(), str.rend());//cout << "rstr is " << rstr << endl;int num = *len;while (num > 0){if (str < rstr){      //如果求最大字符串,应该为str > rstrmin_str.push_back(str.front());//在linux下面没有该c++11加入的函数//min_str.push_back(*str.begin());str.erase(str.begin());}else{min_str.push_back(rstr.front());//min_str.push_back(*rstr.begin());rstr.erase(rstr.begin());}num--;}}int main(){int str_len = 0;string str;string min_str;int ret = 0;ret = input_data(&str_len, str);if (ret < 0){cout << "input the data error" << endl;}solve(&str_len, str, min_str);cout << "min str is: " << min_str << endl;//cout << "output the data: " << endl;//output_data(&str_len, str);system("pause");return 0;}




0 0
原创粉丝点击