思路:将源字符串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 > rstr min_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; }