📜  区分大小写的字符串

📅  最后修改于: 2021-04-22 06:50:27             🧑  作者: Mango

给定一个字符串str ,该字符串包含大写和小写字符。任务是分别对大写和小写字符进行排序,以便如果原始字符串的第i个位置具有大写字符,则在排序后它不应具有小写字符,反之亦然。
例子:

方法:这个想法很容易将小写字符和大写字符在两个不同的向量中,并对这两个向量进行排序。然后使用排序的向量获得排序的字符串。

下面是上述方法的实现:

C++
// C++ implementation of the approach
#include 
using namespace std;
 
// Function to return the sorted string
string getSortedString(string s, int n)
{
 
    // Vectors to store the lowercase
    // and uppercase characters
    vector v1, v2;
    for (int i = 0; i < n; i++) {
        if (s[i] >= 'a' && s[i] <= 'z')
            v1.push_back(s[i]);
        if (s[i] >= 'A' && s[i] <= 'Z')
            v2.push_back(s[i]);
    }
 
    // Sort both the vectors
    sort(v1.begin(), v1.end());
    sort(v2.begin(), v2.end());
    int i = 0, j = 0;
    for (int k = 0; k < n; k++) {
 
        // If current character is lowercase
        // then pick the lowercase character
        // from the sorted list
        if (s[k] >= 'a' && s[k] <= 'z') {
            s[k] = v1[i];
            ++i;
        }
 
        // Else pick the uppercase character
        else if (s[k] >= 'A' && s[k] <= 'Z') {
            s[k] = v2[j];
            ++j;
        }
    }
 
    // Return the sorted string
    return s;
}
 
// Driver code
int main()
{
    string s = "gEeksfOrgEEkS";
    int n = s.length();
 
    cout << getSortedString(s, n);
 
    return 0;
}


Java
// Java implementation of the approach
import java.util.Collections;
import java.util.Vector;
 
class GFG{
 
// Function to return the sorted string
public static String getSortedString(StringBuilder s,
                                     int n)
{
 
    // Vectors to store the lowercase
    // and uppercase characters
    Vector v1 = new Vector<>();
    Vector v2 = new Vector<>();
 
    for(int i = 0; i < n; i++)
    {
        if (s.charAt(i) >= 'a' &&
            s.charAt(i) <= 'z')
            v1.add(s.charAt(i));
 
        if (s.charAt(i) >= 'A' &&
            s.charAt(i) <= 'z')
            v2.add(s.charAt(i));
    }
 
    // Sort both the vectors
    Collections.sort(v1);
    Collections.sort(v2);
 
    int i = 0, j = 0;
 
    for(int k = 0; k < n; k++)
    {
 
        // If current character is lowercase
        // then pick the lowercase character
        // from the sorted list
        if (s.charAt(k) > ='a' &&
            s.charAt(k) <= 'z')
        {
            s.setCharAt(k, v1.elementAt(i));
            ++i;
        }
 
        // Else pick the uppercase character
        else if (s.charAt(k) > ='A' &&
                 s.charAt(k) <= 'Z')
        {
            s.setCharAt(k, v2.elementAt(j));
            ++j;
        }
    }
 
    // Return the sorted string
    return s.toString();
}
 
// Driver code
public static void main(String[] args)
{
    StringBuilder s = new StringBuilder("gEeksfOrgEEkS");
    int n = s.length();
     
    System.out.println(getSortedString(s, n));
}
}
 
// This code is contributed by
// sanjeev2552


Python3
# Python3 implementation of the approach
 
# Function to return the sorted string
def getSortedString(s, n):
 
    # Vectors to store the lowercase
    # and uppercase characters
    v1=[]
    v2=[]
    for i in range(n):
        if (s[i] >= 'a' and s[i] <= 'z'):
            v1.append(s[i])
        if (s[i] >= 'A' and s[i] <= 'Z'):
            v2.append(s[i])
 
    # Sort both the vectors
    v1=sorted(v1)
    v2=sorted(v2)
    i = 0
    j = 0
    for k in range(n):
 
        # If current character is lowercase
        # then pick the lowercase character
        # from the sorted list
        if (s[k] >= 'a' and s[k] <= 'z'):
            s[k] = v1[i]
            i+=1
 
        # Else pick the uppercase character
        elif (s[k] >= 'A' and s[k] <= 'Z'):
            s[k] = v2[j]
            j+=1
 
    # Return the sorted string
    return "".join(s)
 
 
# Driver code
s = "gEeksfOrgEEkS"
ss=[i for i in s]
n = len(ss)
 
print(getSortedString(ss, n))
 
# This code is contributed by mohit kumar 29


C#
// C# implementation of the approach
using System;
using System.Collections.Generic;
 
class GFG
{
 
    // Function to return the sorted string
    public static String getSortedString(char[] s, 
                                         int n)
    {
 
        // Vectors to store the lowercase
        // and uppercase characters
        List v1 = new List();
        List v2 = new List();
        int i = 0;
        for (i = 0; i < n; i++)
        {
            if (s[i] > 'a' && s[i] <= 'z')
                v1.Add(s[i]);
 
            if (s[i] > 'A' && s[i] <= 'z')
                v2.Add(s[i]);
        }
 
        // Sort both the vectors
        v1.Sort();
        v2.Sort();
        int j = 0;
        i = 0;
        for (int k = 0; k < n; k++)
        {
 
            // If current character is lowercase
            // then pick the lowercase character
            // from the sorted list
            if (s[k] > 'a' && s[k] <= 'z')
            {
                s[k] = v1[i];
                ++i;
            }
 
            // Else pick the uppercase character
            else if (s[k] > 'A' && s[k] <= 'Z')
            {
                s[k] = v2[j];
                ++j;
            }
        }
 
        // Return the sorted string
        return String.Join("", s);
    }
 
    // Driver code
    public static void Main(String[] args)
    {
        String s = "gEeksfOrgEEkS";
        int n = s.Length;
        Console.WriteLine(getSortedString(s.ToCharArray(), n));
    }
}
 
// This code is contributed by PrinciRaj1992


输出
eEfggkEkrEOsS

https://youtu.be/icb4ydeBN9g