也许会有朋友说写那么复杂干什么,直接调用一个库函数进行比较多方便。一些基本但复杂的东西,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 人评分

  评论区

  • «
  • »