C ++字母顺序字符串数组

问题描述 投票:0回答:1

我需要一些帮助,因为我整天都在想这个算法...所以,基本上,我想创建一个函数,该函数接受输入的字符串数组和元素数量,并且我想安排一切都按顺序进行...但是有时它可以工作,有时不起作用...如果您能帮助我,将不胜感激...我不需要使用任何东西,只需使用基本字符串(不包含字符数组)它的功能...谢谢!

#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
1个回答
0
投票

您的sortS仅在一对false大于时才返回char,它不会测试它们是否小于。如果输入字符串的长度不同,并且匹配的长度最小,则返回true。当substring更清晰时,它也使用char提取string::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() ;
} 
© www.soinside.com 2019 - 2024. All rights reserved.