字符串排序-变形题

来源:互联网 发布:php中的错误类型有哪些 编辑:程序博客网 时间:2024/05/20 06:49

题目描述

编写一个程序,将输入字符串中的字符按如下规则排序。

规则 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).


输入描述:

输出描述:

示例1

输入

A Famous Saying: Much Ado About Nothing (2012/8).

输出

A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8).

/* 思路一:不用排序,直接从存储的角度入手
#include<iostream>
#include<vector>
#include<string>
using namespace std;


int main()
  {
       vector<int> vec;
       string str;
       while(cin>>str)
        {
            vec.clear();
            int len=str.length();
            for(int i=0;i<26;i++)      //遍历一遍字符串,将输入字符串的所有字母从小到大的顺序存储到vec中
               {
                  for(int j=0;j<len;j++)
                    {
                       if(str[j]-'a'==i||str[j]-'A'==i)
                           vec.push_back(str[j]);
                    }
               }
            for(int i=0,k=0;i<len&&k<vec.size();i++)
               {
                  if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z'))   //遍历一遍原始字符串,如果碰到字母,就用vec中的元素一个个依次替换
                     {
                        str[i]=vec[k];
                        k++;
                      }
               }
            for(int i=0;i<len;i++)
                cout<<str[i];
            cout<<endl;
        }
  }
*/


// 思路二:用排序的思想
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;


int main()
  {
      string str;
      while(cin>>str)
        {
           int len=str.length();
           for(int i=0;i<len-1;i++)
             {
                int temp=0;
                for(int j=0;j<len-i;j++)
                  {
                    if(!isalpha(str[temp]))
                       {
                           temp=j;
                           continue;
                       }
                    if(isalpha(str[j]))
                       {
                           if(tolower(str[temp])>tolower(str[j]))
                               swap(str[temp],str[j]);
                           temp=j;                         
                       }
                  }                
             }
           cout<<str<<endl;
        }
  }
原创粉丝点击