华为OJ 字符串排序

来源:互联网 发布:零基础学c语言 pdf 编辑:程序博客网 时间:2024/04/29 17:13

写完之后,总觉得有点复杂。。
要求:
编写一个程序,将输入字符串中的字符按如下规则排序。
规则1:英文字母从A到Z排列,不区分大小写。
如,输入:Type输出:epTy
规则2:同一个英文字母的大小写同时存在时,按照输入顺序排列。
如,输入:BabA输出:aABb
规则3:非英文字母的其它字符保持原来的位置。
如,输入:By?e输出:Be?y
样例:
输入:
A Famous Saying: Much Ado About Nothing(2012/8).
输出:
A aaAAbc dFgghh: iimM nNn oooos Sttuuuy(2012/8).

#include <iostream>#include <string>using namespace std;void strSort(char *str){    int length = strlen(str);    char temp;    for (int i = 0; i < length; i++)    {        for (int j = 0; j < length - i - 1; j++){            if (!(str[j] - str[j + 1] == 32 || str[j + 1] - str[j] == 32))            {                if (str[j] >= 'a'&&str[j] <= 'z'&&str[j + 1] >= 'a'&&str[j + 1] <= 'z')                {                    if (str[j] - 32>str[j + 1] - 32)                    {                        temp = str[j];                        str[j] = str[j + 1];                        str[j + 1] = temp;                    }                }                else if (str[j] >= 'a'&&str[j] <= 'z')                {                    if (str[j] - 32 > str[j + 1])                    {                        temp = str[j];                        str[j] = str[j + 1];                        str[j + 1] = temp;                    }                }                else if (str[j + 1] >= 'a'&&str[j + 1] <= 'z')                {                    if (str[j] > str[j + 1] - 32)                    {                        temp = str[j];                        str[j] = str[j + 1];                        str[j + 1] = temp;                    }                }                else{                    if (str[j] > str[j + 1] - 32)                    {                        temp = str[j];                        str[j] = str[j + 1];                        str[j + 1] = temp;                    }                }            }        }    }}int main(){    //字符串排序    string str;    getline(cin, str);    char *outPutStr = new char[str.size() + 1];    char *temp = new char[str.size() + 1];    for (int i = 0; i < str.size(); i++)    {        outPutStr[i] = 'a';    }    outPutStr[str.size()] = '\0';    int index = 0;    //先把除字母意外的字符放在最终的位置上    for (int i = 0; i < str.size(); i++)    {        if (str[i]<'A' || (str[i]>'Z'&&str[i]<'a') || str[i]>'z')        {            outPutStr[i] = str[i];        }        else{            temp[index] = str[i];            index++;        }    }    temp[index] = '\0';    //对temp排序    strSort(temp);    index = 0;    for (int i = 0; i < str.size(); i++)    {        if (outPutStr[i] == 'a')        {            outPutStr[i] = temp[index++];        }    }    cout << outPutStr << endl;    return 0;}
0 0
原创粉丝点击