를 정렬하는 동안 마지막에 나타납니다 '
'aa'
'hello'
'start'
'<1-10>'
'<cr>'
내가 C의 정렬 라이브러리를 qsort 사용
, 나는 다음과 같은 출력을 문자열의 다음 세트를 얻을 수있다<1-10>
<cr>
aa
hello
start
하지만 다음 출력을 원합니다.
<1-10>
aa
hello
start
<cr>
도움 주셔서 감사합니다.
를 정렬하는 동안 마지막에 나타납니다 '
'aa'
'hello'
'start'
'<1-10>'
'<cr>'
내가 C의 정렬 라이브러리를 qsort 사용
, 나는 다음과 같은 출력을 문자열의 다음 세트를 얻을 수있다<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
는 C++ 타입이기 때문에 당신은 아마, 어쨌든 다음 C. 을 사용할 것을 주장하는 반면
vector<string> v {"hello", "world", "<cr>", "<cr>string"};
auto bound = partition(v.begin(), v.end(), partitioner);
sort(v.begin(), bound);
sort(bound, v.end());
나는, 실제 설정에 대한 확실하지 않다 std :: vector에 std :: sort와 함께 작성된 코드는 정렬에 대한 사용자 지정 비교 함수를 소개하는 기본 원칙을 보여줍니다. qsort
에서도 맞춤 비교 기능을 사용할 수 있지만 구문은 다릅니다.
사용자 지정 비교 함수는 다음과 같이 작동합니다. 두 문자열이 <
으로 시작하는 경우 나머지는 비교됩니다. 그 중 하나가 <
으로 시작하면이 값은 항상 다른 값보다 아래에 위치합니다. 그렇지 않으면 간단히 비교됩니다. 나는 :-) 당신을 위해 C의 몇 가지 맛을 유지하기 위해 char*
- 데이터 유형을 사용 :
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++? 그리고 어떤 데이터 구조를 문자열 목록/배열/원시 포인터 배열/벡터/...에 사용 하시겠습니까? –
C, 나는 벡터를 사용하고있다 – deathstroke05