首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++字母顺序字符串数组

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

Stack Overflow用户
提问于 2019-12-09 00:59:59
回答 2查看 45关注 0票数 0

我需要一些帮助,因为我整天都在想这个算法now...So,基本上我想创建一个接受输入字符串数组和元素数量的函数,我想在order...but中安排一切有时它有效,有时不...如果你能帮助我,我将不胜感激...我不需要使用任何东西,只需要基本的字符串(不是字符数组)和它的函数...谢谢!

代码语言:javascript
复制
#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;
}  

输出是这样的:

代码语言:javascript
复制
Arica
Andy
Laine
Buford
Kathrin
Slyvia
Earlean
Lakeshia
Marry
Junie
EN

回答 2

Stack Overflow用户

发布于 2019-12-09 01:11:36

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

当一对char大于时,你的sortS只返回false,它不会测试它们是否小于。如果输入字符串的长度不同,并且匹配到最小字符串的长度,它也会返回true。当char更清晰时,它还使用string::operator[]()来提取string::operator[]()

尝试:

代码语言:javascript
复制
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() ;
}

否则它就变得微不足道了:

代码语言:javascript
复制
bool sortS(string a ,string b)
{
    return a < b;
} 
票数 2
EN

Stack Overflow用户

发布于 2019-12-09 01:50:54

所以我解决了problem...apparently,这与我的排序算法(选择排序)...so有关,我通过将排序算法改为冒泡排序来解决它,这是整个程序:

代码语言:javascript
复制
#include <iostream>
#include <string>
#include <string.h>
#include <sstream>  
#include <ctype.h>

using namespace std;

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() ;
}

void bubbleSort(string arr[], int n)  
{  
    int pass=0;
    string temp;
    for(int i = 0; i<n; i++)
    {
       for(int j = i+1; j<n; j++)
       {
          if(sortS(arr[j],arr[i])) 
          {
             temp = arr[i];
             arr[i] = arr[j];
             arr[j] = temp;
          }
       }
        pass++;
    }
}


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;
    bubbleSort(vett,n);
    for(int i=0;i<n;i++)
    {
        cout<<vett[i]<<endl;
    }
    cout<<endl;
return 0;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59237713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档