首页 > 解决方案 > C++ 字母顺序字符串数组

问题描述

我需要一些帮助,因为我整天都在想这个算法......所以,基本上我想创建一个函数来输入一个字符串数组和元素的数量,我想把所有东西都安排在订单...但有时它有效,有时无效...如果您能帮助我将不胜感激...我不需要使用任何东西,只需使用基本字符串(不是字符数组)功能...谢谢!

#include <iostream>
#include <string>
#include <string.h>
#include <sstream>  
#include <ctype.h>

bool sortS(string a ,string b)
{
    for(int i=0;i<a.length() && i<b.length();i++)
    {
        if(a.substr(i,1)>b.substr(i,1))return false;
    }
    return true;
}

void selectionSort(string arr[], int n)  
{  
    int i, j, min_idx;   
    for (i = 0; i < n-1; i++)  
    {  
        min_idx = i;  
        for (j = i+1; j < n; j++)
        {  
            if (sortS(arr[j],arr[min_idx]))
            {
                min_idx = j;
            }
            swap(arr[min_idx], arr[i]);  
        }  
    }  
}

int main()
{
    string vett[]={"Junie","Andy","Laine","Buford","Kathrin","Slyvia","Earlean","Lakeshia","Marry","Arica"};
    int n=sizeof(vett)/sizeof(vett[0]);
    for(int i=0;i<n;i++)
    {
        cout<<vett[i]<<" ";
    }
    cout<<endl;
    selectionSort(vett,n);
    for(int i=0;i<n;i++)
    {
        cout<<vett[i]<<endl;
    }
    cout<<endl;

return 0;
}  

输出是这样的:

Arica
Andy
Laine
Buford
Kathrin
Slyvia
Earlean
Lakeshia
Marry
Junie

标签: c++alphabetical

解决方案


假设您必须逐个字符地检查输入字符串:

当一对s 大于时,您sortS唯一的回报,它不会测试它们是否小于。如果输入字符串的长度不同并且匹配到最小的长度,它也会返回。它还用于提取更清晰的时间。falsechartruesubstringcharstring::operator[]()

尝试:

bool sortS(string a ,string b)
{
    for(int i=0; i < a.length() && i < b.length(); ++i)
    {
        if (a[i] > b[i])
           return false;
        else if (a[i] < b[i])
           return true;
    }
    return a.length() < b.length() ;
}

否则它是微不足道的:

bool sortS(string a ,string b)
{
    return a < b;
} 

推荐阅读