也许会有朋友说写那么复杂干什么,直接调用一个库函数进行比较多方便。一些基本但复杂的东西,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 人评分
点我有惊喜!你懂得!浏览:1462 |
C语言训练-最大数问题 (C语言代码).........关于-1浏览:762 |
C语言程序设计教程(第三版)课后习题12.1 (C语言代码)浏览:1026 |
钟神赛车 (C++代码)浏览:905 |
【排队买票】 (C语言代码)浏览:944 |
剪刀石头布 (C语言代码)浏览:802 |
【明明的随机数】 (C语言代码)浏览:845 |
简单的a+b (C语言代码)浏览:542 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:477 |
C语言训练-求s=a+aa+aaa+aaaa+aa...a的值 (C语言代码)浏览:859 |