也许会有朋友说写那么复杂干什么,直接调用一个库函数进行比较多方便。一些基本但复杂的东西,C/C++的乐趣就在此。用python直接调用库函数最简洁。
解题思路:
C++代码纯手写,采用实参宏定义函数交换2个字符串。字符串两两比较,自定义函数for循环,遍历实现字符串逐位比较,返回大小比较结果,立刻交换即可。保证str1<=str2<=str3。
保证字符串长度str1.length()<=str2.length()<=str1.length(),后面循环遍历字符串不会越界出错。
保证字符串排序str1<=str2<=str3,两两比较,具体地比较2个索引:字符串1中首次小于字符串2中元素的索引index_1与字符串2中首次小于字符串1中元素的索引index_1。注意边界特殊情况,str1中元素全不小于str2中的,那么索引index_1为默认值0。
if (flag_12>flag_21 or flag_12==0) return 1;//str1大于str2
else if(flag_12<=flag_21) return 0;//str1小于str2
注意事项:
之前审题不清,误以为是字符串所有字符求和结果的排序,直接“答案错误”。后附代码。
参考代码:
//逐位比较最小排序
#include<iostream>
#include<string>
#define swap_str(str_x,str_y) {string str_tmp=str_x;str_x=str_y;str_y=str_tmp;}//采用实参宏定义函数交换2个字符串
using namespace std;
int max_two_string(string,string);
int main()
{
string str1,str2,str3;
cin>>str1>>str2>>str3;
if (str1.length()>str2.length()) swap_str(str1,str2);//保证字符串长度str1.length()<=str2.length()
if (str1.length()>str3.length()) swap_str(str1,str3);
if (str2.length()>str3.length()) swap_str(str2,str3);
int result = 0;
result = max_two_string(str1 , str2);
if (result==1) swap_str(str1,str2);//如果str1大于str2,那么交换字符串1与字符串2
result = max_two_string(str1 , str3);
if (result==1) swap_str(str1,str3);
result = max_two_string(str2 , str3);
if (result==1) swap_str(str2,str3);
cout<<str1<<endl<<str2<<endl<<str3<<endl;
return 0;
}
int max_two_string(string str_1,string str_2){
int flag_12=0;
int flag_21=0;
for(int i=0;i<str_1.length();i++)
{
if (!flag_12){
if(str_1[i]<str_2[i])
flag_12=i+1;
}
if (!flag_21){
if(str_2[i]<str_1[i])
flag_21=i+1;
}
if(flag_12 and flag_21) break;//提前终止加快效率
}
if (flag_12>flag_21 or flag_12==0) return 1;//str1大于str2
else if(flag_12<=flag_21) return 0;//str1小于str2
}
//整体求和最小排序
#include<iostream>
#include<string>
#define swap_str(str_x,str_y) {string str_tmp=str_x;str_x=str_y;str_y=str_tmp;}//采用实参宏定义函数交换2个字符串
using namespace std;
int main()
{
string str1,str2,str3;
cin>>str1>>str2>>str3;
//cout<<str1<<endl<<str2<<endl<<str3<<endl;
int cnt1=0,cnt2=0,cnt3=0;
for(int i =0;i<str1.length();i++)
{
cnt1+=str1[i];
}
for(int i =0;i<str2.length();i++)
{
cnt2+=str2[i];
}
for(int i =0;i<str3.length();i++)
{
cnt3+=str3[i];
}
cout<<cnt1<<' '<<cnt2<<' '<<cnt3<<endl;
if (cnt1>cnt2) swap_str(str1,str2);
if (cnt1>cnt3) swap_str(str1,str3);
if (cnt2>cnt3) swap_str(str2,str3);
cout<<str1<<endl<<str2<<endl<<str3<<endl;
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复