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