應該出現我有以下字符串集串contarting「<cr>」最後在排序
'aa'
'hello'
'start'
'<1-10>'
'<cr>'
當我的qsort使用從C中的排序庫,我得到下面的輸出
<1-10>
<cr>
aa
hello
start
但我想要以下輸出
<1-10>
aa
hello
start
<cr>
感謝您的幫助。
應該出現我有以下字符串集串contarting「<cr>」最後在排序
'aa'
'hello'
'start'
'<1-10>'
'<cr>'
當我的qsort使用從C中的排序庫,我得到下面的輸出
<1-10>
<cr>
aa
hello
start
但我想要以下輸出
<1-10>
aa
hello
start
<cr>
感謝您的幫助。
<cr>
的字符串移動到不同的容器中。<cr>
而且,而是採用單獨的容器,你可以在年底移動包含<cr>
字符串列表(std::partition
),並在兩個子陣列上應用qsort
。
bool partitioner(string str) {
return str.find("<cr>") == string::npos;
}
現在:
vector<string> v {"hello", "world", "<cr>", "<cr>string"};
auto bound = partition(v.begin(), v.end(), partitioner);
sort(v.begin(), bound);
sort(bound, v.end());
我不知道您的實際設置,因爲vector
是一個C++類,而你的國家,你要使用C. 不管怎樣,也許以下爲std :: vector編寫的代碼與std :: sort結合使用,顯示了基本原理,您可以在其中引入用於排序的自定義比較函數。請注意,qsort
也允許自定義比較函數,但語法會有所不同。
自定義比較函數的工作原理如下:如果兩個字符串都以<
開頭,則比較它們的餘數。如果其中一個以<
開頭,那麼這個總是排在另一個之下。否則,他們只是比較。我用char*
- 數據類型跟上的C一番風味爲你:-):
int main() {
std::vector<const char*> s = {
"aa",
"start",
"hello",
"<d-10>",
"<cr>"
};
// sort using a custom function object
struct {
bool operator()(const char*a, const char*b)
{
if (*a == '<') {
if (*b == '<') {
return strcmp(a+1,b+1) < 0;
}
else {
return false;
}
}
else if (*b == '<') {
if (*a == '<') {
return strcmp(a+1,b+1) < 0;
}
else {
return true;
}
}
else
return strcmp(a,b) < 0;
}
} customLess;
std::sort(s.begin(), s.end(), customLess);
for (auto a : s) {
std::cout << a << std::endl;
}
return 0;
}
輸出:
aa
hello
start
<cr>
<d-10>
請出示你的代碼。我們不介意讀者,也不會在沒有看到它的情況下告訴你它有什麼問題。請僅使用相關的語言標籤 - C和C++是不同的語言。 – kaylum
C或C++?你想要使用哪個數據結構作爲字符串list/array/raw pointer array/vector/...? –
C,我正在使用vector – deathstroke05