我正在尝试制作一个程序,用我想要的字母对我的输入文本进行排序。例如,输入: Vvb Abv Abvgd Aaa 应该会产生以下列表:
我认为我解释了它,所以你可以得到它,我想制作自定义列表,如: A,B,V,G,D ...... ,并按这种方式对输入的文本进行排序,并且 Aa 在 Ab 之前,请举例说明如何操作。
这是我的代码,我尝试通过给每个字母分数然后通过冒泡排序对它进行排序,但它不能正常工作,在某些情况下,必须首先的单词有更多的点然后那个单词必须去在第一次之前
using namespace std;
string str = "";
int founded = 0;
int prezime = 0;
//---A---
string a1[20];
int af1 = 1;
int ap1[20];
//---B---
void bubble_sort(int arr[], int n, string arr2[])
{
for (int i = 0; i < n; ++i)
for (int j = 0; j < n - i - 1; ++j)
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
string temp2 = a1[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
arr2[j] = arr2[j + 1];
arr2[j + 1] = temp2;
}
}
int main()
{
wcout << L"Type words:\n>";
getline(cin, str);
for (unsigned int araz = 0; araz < str.size(); araz++) {
if (str[araz] == ' ') {
founded = 0;
af1++;
continue;
}
if (founded == 0) {
if (str[araz] == 'A') {
founded = 1;
ap1[af1] += 1;
a1[af1] += str[araz];
}
}
else {
a1[af1] += str[araz];
}
}
for (unsigned int araz2 = 1; araz2 < str.size(); araz2++) {
int duzina = a1[araz2].length();
if (duzina > 0) {
if (a1[araz2][0] == 'A') {
if (duzina > 1) {
if (a1[araz2][1] == 'a') ap1[araz2] += 2;
if (a1[araz2][1] == 'b') ap1[araz2] += 3;
if (a1[araz2][1] == 'v') ap1[araz2] += 4;
if (a1[araz2][1] == 'g') ap1[araz2] += 5;
if (a1[araz2][1] == 'd') ap1[araz2] += 6;
if (a1[araz2][1] == 'dj') ap1[araz2] += 7;
if (a1[araz2][1] == 'e') ap1[araz2] += 8;
if (a1[araz2][1] == 'zz') ap1[araz2] += 9;
if (a1[araz2][1] == 'z') ap1[araz2] += 10;
if (a1[araz2][1] == 'i') ap1[araz2] += 11;
if (a1[araz2][1] == 'j') ap1[araz2] += 12;
if (a1[araz2][1] == 'k') ap1[araz2] += 13;
if (a1[araz2][1] == 'l') ap1[araz2] += 14;
if (a1[araz2][1] == 'lj') ap1[araz2] += 15;
if (a1[araz2][1] == 'm') ap1[araz2] += 16;
if (a1[araz2][1] == 'n') ap1[araz2] += 17;
if (a1[araz2][1] == 'nj') ap1[araz2] += 18;
if (a1[araz2][1] == 'o') ap1[araz2] += 19;
if (a1[araz2][1] == 'p') ap1[araz2] += 20;
if (a1[araz2][1] == 'r') ap1[araz2] += 21;
if (a1[araz2][1] == 's') ap1[araz2] += 22;
if (a1[araz2][1] == 't') ap1[araz2] += 23;
if (a1[araz2][1] == 'c') ap1[araz2] += 24;
if (a1[araz2][1] == 'u') ap1[araz2] += 25;
if (a1[araz2][1] == 'f') ap1[araz2] += 26;
if (a1[araz2][1] == 'h') ap1[araz2] += 27;
if (a1[araz2][1] == 'c') ap1[araz2] += 28;
if (a1[araz2][1] == 'c') ap1[araz2] += 29;
if (a1[araz2][1] == 'dz') ap1[araz2] += 30;
if (a1[araz2][1] == 's') ap1[araz2] += 31;
}
if (duzina > 2) {
if (a1[araz2][2] == 'a') ap1[araz2] += 3;
if (a1[araz2][2] == 'b') ap1[araz2] += 4;
if (a1[araz2][2] == 'v') ap1[araz2] += 5;
if (a1[araz2][2] == 'g') ap1[araz2] += 6;
if (a1[araz2][2] == 'd') ap1[araz2] += 7;
if (a1[araz2][2] == 'dj') ap1[araz2] += 8;
if (a1[araz2][2] == 'e') ap1[araz2] += 9;
if (a1[araz2][2] == 'zz') ap1[araz2] += 10;
if (a1[araz2][2] == 'z') ap1[araz2] += 11;
if (a1[araz2][2] == 'i') ap1[araz2] += 12;
if (a1[araz2][2] == 'j') ap1[araz2] += 13;
if (a1[araz2][2] == 'k') ap1[araz2] += 14;
if (a1[araz2][2] == 'l') ap1[araz2] += 15;
if (a1[araz2][2] == 'lj') ap1[araz2] += 16;
if (a1[araz2][2] == 'm') ap1[araz2] += 17;
if (a1[araz2][2] == 'n') ap1[araz2] += 18;
if (a1[araz2][2] == 'nj') ap1[araz2] += 19;
if (a1[araz2][2] == 'o') ap1[araz2] += 20;
if (a1[araz2][2] == 'p') ap1[araz2] += 21;
if (a1[araz2][2] == 'r') ap1[araz2] += 22;
if (a1[araz2][2] == 's') ap1[araz2] += 23;
if (a1[araz2][2] == 't') ap1[araz2] += 24;
if (a1[araz2][2] == 'c') ap1[araz2] += 25;
if (a1[araz2][2] == 'u') ap1[araz2] += 26;
if (a1[araz2][2] == 'f') ap1[araz2] += 27;
if (a1[araz2][2] == 'h') ap1[araz2] += 28;
if (a1[araz2][2] == 'c') ap1[araz2] += 29;
if (a1[araz2][2] == 'c') ap1[araz2] += 30;
if (a1[araz2][2] == 'dz') ap1[araz2] += 31;
if (a1[araz2][2] == 's') ap1[araz2] += 32;
}
if (duzina > 3) {
if (a1[araz2][3] == 'a') ap1[araz2] += 4;
if (a1[araz2][3] == 'b') ap1[araz2] += 5;
if (a1[araz2][3] == 'v') ap1[araz2] += 6;
if (a1[araz2][3] == 'g') ap1[araz2] += 7;
if (a1[araz2][3] == 'd') ap1[araz2] += 8;
if (a1[araz2][3] == 'dj') ap1[araz2] += 9;
if (a1[araz2][3] == 'e') ap1[araz2] += 10;
if (a1[araz2][3] == 'zz') ap1[araz2] += 11;
if (a1[araz2][3] == 'z') ap1[araz2] += 12;
if (a1[araz2][3] == 'i') ap1[araz2] += 13;
if (a1[araz2][3] == 'j') ap1[araz2] += 14;
if (a1[araz2][3] == 'k') ap1[araz2] += 15;
if (a1[araz2][3] == 'l') ap1[araz2] += 16;
if (a1[araz2][3] == 'lj') ap1[araz2] += 17;
if (a1[araz2][3] == 'm') ap1[araz2] += 18;
if (a1[araz2][3] == 'n') ap1[araz2] += 19;
if (a1[araz2][3] == 'nj') ap1[araz2] += 20;
if (a1[araz2][3] == 'o') ap1[araz2] += 21;
if (a1[araz2][3] == 'p') ap1[araz2] += 22;
if (a1[araz2][3] == 'r') ap1[araz2] += 23;
if (a1[araz2][3] == 's') ap1[araz2] += 24;
if (a1[araz2][3] == 't') ap1[araz2] += 25;
if (a1[araz2][3] == 'c') ap1[araz2] += 26;
if (a1[araz2][3] == 'u') ap1[araz2] += 27;
if (a1[araz2][3] == 'f') ap1[araz2] += 28;
if (a1[araz2][3] == 'h') ap1[araz2] += 29;
if (a1[araz2][3] == 'c') ap1[araz2] += 30;
if (a1[araz2][3] == 'c') ap1[araz2] += 31;
if (a1[araz2][3] == 'dz') ap1[araz2] += 32;
if (a1[araz2][3] == 's') ap1[araz2] += 33;
}
if (duzina > 4) {
if (a1[araz2][4] == 'a') ap1[araz2] += 5;
if (a1[araz2][4] == 'b') ap1[araz2] += 6;
if (a1[araz2][4] == 'v') ap1[araz2] += 7;
if (a1[araz2][4] == 'g') ap1[araz2] += 8;
if (a1[araz2][4] == 'd') ap1[araz2] += 9;
if (a1[araz2][4] == 'dj') ap1[araz2] += 10;
if (a1[araz2][4] == 'e') ap1[araz2] += 11;
if (a1[araz2][4] == 'zz') ap1[araz2] += 12;
if (a1[araz2][4] == 'z') ap1[araz2] += 13;
if (a1[araz2][4] == 'i') ap1[araz2] += 14;
if (a1[araz2][4] == 'j') ap1[araz2] += 15;
if (a1[araz2][4] == 'k') ap1[araz2] += 16;
if (a1[araz2][4] == 'l') ap1[araz2] += 17;
if (a1[araz2][4] == 'lj') ap1[araz2] += 18;
if (a1[araz2][4] == 'm') ap1[araz2] += 19;
if (a1[araz2][4] == 'n') ap1[araz2] += 20;
if (a1[araz2][4] == 'nj') ap1[araz2] += 21;
if (a1[araz2][4] == 'o') ap1[araz2] += 22;
if (a1[araz2][4] == 'p') ap1[araz2] += 23;
if (a1[araz2][4] == 'r') ap1[araz2] += 24;
if (a1[araz2][4] == 's') ap1[araz2] += 25;
if (a1[araz2][4] == 't') ap1[araz2] += 26;
if (a1[araz2][4] == 'c') ap1[araz2] += 27;
if (a1[araz2][4] == 'u') ap1[araz2] += 28;
if (a1[araz2][4] == 'f') ap1[araz2] += 29;
if (a1[araz2][4] == 'h') ap1[araz2] += 30;
if (a1[araz2][4] == 'c') ap1[araz2] += 31;
if (a1[araz2][4] == 'c') ap1[araz2] += 32;
if (a1[araz2][4] == 'dz') ap1[araz2] += 33;
if (a1[araz2][4] == 's') ap1[araz2] += 34;
}
if (duzina > 5) {
if (a1[araz2][5] == 'a') ap1[araz2] += 6;
if (a1[araz2][5] == 'b') ap1[araz2] += 7;
if (a1[araz2][5] == 'v') ap1[araz2] += 8;
if (a1[araz2][5] == 'g') ap1[araz2] += 9;
if (a1[araz2][5] == 'd') ap1[araz2] += 10;
if (a1[araz2][5] == 'dj') ap1[araz2] += 11;
if (a1[araz2][5] == 'e') ap1[araz2] += 12;
if (a1[araz2][5] == 'zz') ap1[araz2] += 13;
if (a1[araz2][5] == 'z') ap1[araz2] += 14;
if (a1[araz2][5] == 'i') ap1[araz2] += 15;
if (a1[araz2][5] == 'j') ap1[araz2] += 16;
if (a1[araz2][5] == 'k') ap1[araz2] += 17;
if (a1[araz2][5] == 'l') ap1[araz2] += 18;
if (a1[araz2][5] == 'lj') ap1[araz2] += 19;
if (a1[araz2][5] == 'm') ap1[araz2] += 20;
if (a1[araz2][5] == 'n') ap1[araz2] += 21;
if (a1[araz2][5] == 'nj') ap1[araz2] += 22;
if (a1[araz2][5] == 'o') ap1[araz2] += 23;
if (a1[araz2][5] == 'p') ap1[araz2] += 24;
if (a1[araz2][5] == 'r') ap1[araz2] += 25;
if (a1[araz2][5] == 's') ap1[araz2] += 26;
if (a1[araz2][5] == 't') ap1[araz2] += 27;
if (a1[araz2][5] == 'c') ap1[araz2] += 28;
if (a1[araz2][5] == 'u') ap1[araz2] += 29;
if (a1[araz2][5] == 'f') ap1[araz2] += 30;
if (a1[araz2][5] == 'h') ap1[araz2] += 31;
if (a1[araz2][5] == 'c') ap1[araz2] += 32;
if (a1[araz2][5] == 'c') ap1[araz2] += 33;
if (a1[araz2][5] == 'dz') ap1[araz2] += 34;
if (a1[araz2][5] == 's') ap1[araz2] += 35;
}
if (duzina > 6) {
if (a1[araz2][6] == 'a') ap1[araz2] += 7;
if (a1[araz2][6] == 'b') ap1[araz2] += 8;
if (a1[araz2][6] == 'v') ap1[araz2] += 9;
if (a1[araz2][6] == 'g') ap1[araz2] += 10;
if (a1[araz2][6] == 'd') ap1[araz2] += 11;
if (a1[araz2][6] == 'dj') ap1[araz2] += 12;
if (a1[araz2][6] == 'e') ap1[araz2] += 13;
if (a1[araz2][6] == 'zz') ap1[araz2] += 14;
if (a1[araz2][6] == 'z') ap1[araz2] += 15;
if (a1[araz2][6] == 'i') ap1[araz2] += 16;
if (a1[araz2][6] == 'j') ap1[araz2] += 17;
if (a1[araz2][6] == 'k') ap1[araz2] += 18;
if (a1[araz2][6] == 'l') ap1[araz2] += 19;
if (a1[araz2][6] == 'lj') ap1[araz2] += 20;
if (a1[araz2][6] == 'm') ap1[araz2] += 21;
if (a1[araz2][6] == 'n') ap1[araz2] += 22;
if (a1[araz2][6] == 'nj') ap1[araz2] += 23;
if (a1[araz2][6] == 'o') ap1[araz2] += 24;
if (a1[araz2][6] == 'p') ap1[araz2] += 25;
if (a1[araz2][6] == 'r') ap1[araz2] += 26;
if (a1[araz2][6] == 's') ap1[araz2] += 27;
if (a1[araz2][6] == 't') ap1[araz2] += 28;
if (a1[araz2][6] == 'c') ap1[araz2] += 29;
if (a1[araz2][6] == 'u') ap1[araz2] += 30;
if (a1[araz2][6] == 'f') ap1[araz2] += 31;
if (a1[araz2][6] == 'h') ap1[araz2] += 32;
if (a1[araz2][6] == 'c') ap1[araz2] += 33;
if (a1[araz2][6] == 'c') ap1[araz2] += 34;
if (a1[araz2][6] == 'dz') ap1[araz2] += 35;
if (a1[araz2][6] == 's') ap1[araz2] += 36;
}
if (duzina >= 7) ap1[araz2] += 1;
if (duzina >= 8) ap1[araz2] += 1;
if (duzina >= 9) ap1[araz2] += 1;
if (duzina >= 10) ap1[araz2] += 1;
if (duzina >= 11) ap1[araz2] += 1;
if (duzina >= 12) ap1[araz2] += 1;
if (duzina >= 13) ap1[araz2] += 1;
if (duzina >= 14) ap1[araz2] += 1;
if (duzina >= 15) ap1[araz2] += 1;
if (duzina >= 16) ap1[araz2] += 1;
if (duzina >= 17) ap1[araz2] += 1;
if (duzina >= 18) ap1[araz2] += 1;
if (duzina >= 19) ap1[araz2] += 1;
if (duzina >= 20) ap1[araz2] += 1;
}
}
}
int n = sizeof (ap1) / sizeof (ap1[0]);
bubble_sort(ap1, n, a1);
for (int i = 1; i < n; ++i) {
//cout << ap1[i] << endl;
//cout << a1[i] << endl;
if (ap1[i] != 0) {
cout << endl;
cout << ap1[i];
cout << a1[i] << endl;
}
}
system("PAUSE");
return 0;
}
答案 0 :(得分:4)
我建议您使用std::sort
标题<algorithm>
。 It allows you to pass your own sorting operator.在此运算符中,您必须定义排序。您的订购应该是这样的:
char value(char inp){
if (inp == 'A')
return 0;
if (inp == 'B')
return 1;
if (inp == 'V')
return 2;
if (inp == 'G')
return 3;
if (inp == 'D')
return 4;
...
}
struct comp {
bool operator()(const std::string& s1, const std::string& s2) {
for(size_t i = 0; i < std::min(s1.size(), s2.size()) && value(s1[i]) == value(s2[i]); ++i)
;
if (value(s1[i]) == value(s2[i]))
return s1.size() < s2.size();
return value(s1[i]) < value(s2[i]);
}
};
甚至可以使用std::lexicograpical_compare
:
bool value_lt(char v1, char v2){
return v1 < v2;
}
struct comp {
bool operator()(const std::string& s1, const std::string& s2) {
return std::lexicographical_compare(s1.begin(), s1.end(), s2.begin(), s2.end(), value_lt);
}
};
如果您真正想要做的是更好地了解bubblesort,我建议您首先尝试使用标准排序,然后抽象排序以利用我刚刚概述的一个比较