我有一個包含單詞列表的文本文件。在C++中以非ASCII格式的第一個字母對字符串的向量排序
我用ifstream
讀這段話成爲一個vector
,現在我想他們在類似的順序進行排序:
A a B b C c [...]
我想這使用第三for循環泡沫搜索內實現算法看每個單詞的第一個字符(我知道這是遠離最有效的方式,特別是如果我使用大型數據集)
然後檢查字母和下一個字母是大寫還是小寫,如果大寫字母與當前字母是相同的字母,則切換,但是似乎沒有工作。
void bubble_Sort (vector <string> & words)
{
for (unsigned i = words.size(); i >= 2; --i)
{
for (unsigned k = 0; k + 1 < i; k++)
{
int hi = k+1;
string temp1 = words[hi];
string temp2 = words[k];
int smallsize = words[hi].size();
int smallprecedence = 0;
if (words[k].size() < words[hi].size())
smallsize = words[k].size();
for (unsigned j = 0; j < smallsize; j++)
{
if (temp1[j] >= 'A' && temp1[j] <= 'Z')
{
if (temp2[j] >='a' && temp2[j] <= 'z')
{
char lowercase1 = temp1[j] + 32;
if (lowercase1 == temp2[j])
{
string temp = words[k];
words[k] = words[hi];
words[hi] = temp;
break;
}
}
else if (temp2[j] >= 'A' && temp2[j] <= 'Z')
{
if (temp1[j] < temp2[j])
{
string temp = words[k];
words[k] = words[hi];
words[hi] = temp;
break;
}
}
}
if (temp1[j] >= 'a' && temp1[j] <= 'z')
{
if (temp2[j] >= 'A' && temp2[j] <= 'Z')
{
char uppercase1 = temp1[j] - 32;
if (uppercase1 < temp2[j])
{
string temp = words[k];
words[k] = words[hi];
words[hi] = temp;
break;
}
}
else if (temp2[j] >= 'a' && temp2[j] <= 'z')
{
if (temp1[j] < temp2[j])
{
string temp = words[k];
words[k] = words[hi];
words[hi] = temp;
break;
}
}
}
else if (temp1[j] == temp2[j] && temp1.size() < temp2.size())
++smallprecedence;
}
if (smallprecedence == smallsize)
{
string temporary = words[k];
words[k] = words[hi];
words[hi] = temporary;
}
}
}
}
你是否正在實施自己的bubblesort作爲練習?如果沒有,你應該使用'std :: sort'並實現比較函數。 –
是的,我正在嘗試使用冒泡排序來排序向量的順序A和B b等等,儘管在ASCII比A更大,這是我一直存在的問題。 –